Sql oracle中的全局变量
在sqldeveloper中,我需要存储变量并在以后使用它。如何做到这一点Sql oracle中的全局变量,sql,oracle,oracle11g,oracle10g,sql-scripts,Sql,Oracle,Oracle11g,Oracle10g,Sql Scripts,在sqldeveloper中,我需要存储变量并在以后使用它。如何做到这一点 VARIABLE liab NUMBER; exec select nvl(LIAB_ID,-1)into liab FROM GETM_LIAB_CUST WHERE CUSTOMER_NO = (select customer_id from apps_master where ACCOUNT_NUMBER='&C' AND BRANCH_CODE = '&B') ; SPOOL
VARIABLE liab NUMBER;
exec select nvl(LIAB_ID,-1)into liab FROM GETM_LIAB_CUST WHERE CUSTOMER_NO = (select customer_id from apps_master where ACCOUNT_NUMBER='&C' AND BRANCH_CODE = '&B') ;
SPOOL c:\query.SQL
select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID =liab ;' FROM DUAL;
spool off
尝试
它不起作用。请帮助我,所以在引用它时需要在它前面加一个冒号:
VARIABLE liab NUMBER;
exec select nvl(LIAB_ID,-1) into :liab FROM ...
SPOOL c:\query.SQL
select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID = ' || :liab || ';' FROM DUAL;
spool off
也可以使用替换变量而不是绑定变量执行此操作:
column liab new_value g_liab
select nvl(LIAB_ID,-1) as liab FROM ...
SPOOL c:\query.SQL
select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID = &g_liab;' FROM DUAL;
spool off
定义了一个替换变量&y
,其值是从后续查询中名为x
的列中设置的
在这两种情况下,SQL Developer都会将头和运行的命令放入假脱机文件中,因此您会看到:
> select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID = ' || :liab || ';' from dual
'SELECT*FROMGETB_UTILSWHERELIAB_ID='||:LIAB||';'
----------------------------------------------------------------------------------
SELECT * FROM GETB_UTILS WHERE LIAB_ID = 1;
> spool off
您可以添加set heading off
和set echo off
,但如果直接从SQL工作表运行,您仍然会得到:
> select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID = ' || :liab || ';' from dual
SELECT * FROM GETB_UTILS WHERE LIAB_ID = 1;
要删除echo的命令,您需要将其保存为脚本,然后从另一个工作表中运行它,就像您前面的问题一样。因此,如果您有一个名为liab.sql
的脚本,其中包含:
VARIABLE liab NUMBER;
set feedback off
exec select nvl(LIAB_ID,-1) into :liab FROM ...
set echo off
set heading off
SPOOL c:\query.SQL
select 'SELECT * FROM GETB_UTILS WHERE LIAB_ID = ' || :liab || ';' FROM DUAL;
spool off
。。。然后和我一起跑
@liab.sql
。。。query.sql
文件只包含:
SELECT * FROM GETB_UTILS WHERE LIAB_ID = 1;
“它不起作用”到底是什么意思?错误消息、输出丢失/错误、爆竹?嗨,弗兰克——ORA-06550:第2行,第34列:PLS-00201:标识符“LIAB”必须声明ORA-06550:第2行,第39列:PL/SQL:ORA-00904::无效标识符ORA-06550:第2行,第7列:PL/SQL:SQL语句忽略请不要在注释中添加其他信息。改为编辑您的问题(使用“编辑”按钮)。正在工作。谢谢Alex:)@user3737084-与上一个问题一样,您需要将其作为脚本运行,以允许
设置回显关闭
生效,因为其行为与设置termout
相同。我已经更新了答案以显示差异。
SELECT * FROM GETB_UTILS WHERE LIAB_ID = 1;