Sql oracle中的全局变量

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

在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 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;