【问题标题】:SQL query help - find table in unknown schema and query dataSQL查询帮助-在未知模式中查找表并查询数据
【发布时间】:2014-12-16 04:02:27
【问题描述】:

我有几个简单的查询,我在 Oracle 中以 sysdba 身份手动运行,以检查 Java 应用程序的版本信息。棘手的部分是模式名称各不相同,所以有时我必须搜索表以找到所有者/模式,然后查询信息。

有没有办法从一个查询中获取输出并使用它来执行一个模式限定的查询,以便它可以自动化?

我使用的查询是:

SELECT username FROM dba_tables WHERE table_name LIKE 'APPVERSDATA%';

SELECT max(appfullversion) from SCHEMA.APPVERSDATA;

一定有办法将模式名称从第一个查询作为变量传递给第二个查询?

编辑:最终我想将输出设置为 shell 脚本中的变量。

TIA

【问题讨论】:

    标签: sql oracle search


    【解决方案1】:

    我假设SCHEMA.APPVERSDATA 将是第一个查询的输出,所以最好的办法是执行一些 PL/SQL 作为存储函数或过程:

    DECLARE
      l_schema varchar2(10);
    BEGIN
      SELECT DISTINCT owner 
      INTO l_schema
      FROM dba_tables
      WHERE table_name LIKE 'APPVERSDATA%';
      EXECUTE IMMEDIATE 'SELECT max(appfullversion) from ' || l_schema || '.APPVERSDATA';
    end;
    /
    

    这并没有说明您将在数据执行后做什么。更新问题,我会更新答案。
    编辑(版本 2!):
    所以你的外壳看起来像这样:

    x () {
    sqlplus -s u/p<<EOF
    set serveroutput on;
    set feedback off;
    DECLARE
      l_schema varchar2(10);
    BEGIN
      SELECT DISTINCT owner 
      INTO l_schema
      FROM dba_tables
      WHERE table_name LIKE 'APPVERSDATA%';
      EXECUTE IMMEDIATE 'SELECT max(appfullversion) from ' || l_schema || '.APPVERSDATA';
      dbms_output.put_line(l_return);
    end;
    /
    EOF
    }
    echo $(x $1)
    

    【讨论】:

    • 谢谢,我更新了问题,但我想在 shell 脚本中将输出作为变量获取。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多