代码之家  ›  专栏  ›  技术社区  ›  ImaginaryHuman072889

批处理文件-在For循环中调用动态Oracle查询

  •  1
  • ImaginaryHuman072889  · 技术社区  · 7 年前

    this one .

    此命令似乎可以很好地获得单个查询的结果:

    <query>; | sqlplus <username>/<password>@<database>
    

    1. 我可以循环使用这个命令。(这个命令在循环中似乎不能很好地工作。我一直收到一个错误 | 无法识别字符。)

    table1, columnA
    table1, columnB
    table2, columnC
    table2, columnD
    

    我想查询数据库以查看该文件中的每个表/列对,并返回数据类型和数据精度。

    我不需要实际查询的帮助。这是一个提供我需要的结果的查询:

    SELECT DATA_TYPE,DATA_PRECISION FROM ALL_TAB_COLUMNS
       WHERE TABLE_NAME='<tableName>' AND COLUMN_NAME='<columnName>';
    

    我之所以希望为数据库连接和数据库查询使用单独的命令是因为,由于将调用多个查询,所以只连接到数据库一次,执行所有查询,然后退出连接是有意义的。

    像这样的事情似乎是我想要完成的,但它不能正常工作。请参见下面我当前的批处理脚本。

    REM Required for dynamic values in for loop
    setlocal enabledelayedexpansion
    
    REM For all of the lines in my input text file
    for /f "tokens=1,2 delims=, " %%i in (inputFile.txt) do (
    
       REM Store column name and table name
       set tableName=%%i
       set columnName=%%j
    
       REM Perform query
       for /f "tokens=1,2 skip=2" %%k in ('SELECT DATA_TYPE,DATA_PRECISION FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=''!tableName!'' AND COLUMN_NAME=''!columnName!''; | sqlplus <username>/<password>@<database>') do (
    
          REM Only care about first result, since it will only return one row
          set dataType=%%k
          set dataPrecision=%%l
    
          REM Process dataType and dataPrecision as necessary
          REM ...
       )
    )
    
    0 回复  |  直到 7 年前
    推荐文章