我有一些简单的查询,我在Oracle中作为sysdba手动运行,以检查java应用程序的版本信息。棘手的部分是模式名称不同,所以有时我必须搜索表以查找所有者/模式,然后查询信息。
有没有办法从一个查询中获取输出并使用它来执行模式限定查询,因此它可以自动化?
我使用的查询是:
SELECT username FROM dba_tables WHERE table_name LIKE 'APPVERSDATA%';
SELECT max(appfullversion) from SCHEMA.APPVERSDATA;
必须有办法将第一个查询中的模式名称作为变量传递给第二个查询吗?
编辑:最终我想将输出设置为shell脚本中的变量。
TIA
答案 0 :(得分:0)
我假设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!):
所以你的shell看起来像这样:
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)