如何在sqlplus中定义一个名为“1”的绑定变量

问题描述 投票:0回答:2

我有一个使用绑定变量编写的应用程序,名为:1,2,3.. 我想练习存储在 sql_area 中的执行计划,并使用相同的文本在 sqlplus 中执行查询

举例:

select  * from dual where dummy=:1;

如何在 sqlplus 中将“1”定义为绑定变量?

var 1 varchar2(1); doesn't work.

它无法将“1”识别为变量名。

sql oracle oracle-sqldeveloper sqlplus
2个回答
2
投票

是的,这很烦人,但是您可以将查询包装到匿名 PL/SQL 块(脚本)中,如下所示:

SQL> exec execute immediate 'select count(*) cnt from dual where :1=dummy' using 'x';

PL/SQL procedure successfully completed.

SQL> select sql_id from v$sqlarea a where sql_text like 'select count(*) cnt from dual%';

SQL_ID
-------------
8y7sav2n21055

1 row selected.

SQL> ed tests/run_sql.sql

SQL> !cat tests/run_sql.sql
declare
  vsql clob;
begin
  select sql_fulltext into vsql from v$sqlarea a where a.sql_id='&1';
  execute immediate vsql using &2;
end;
/

SQL> @tests/run_sql.sql 8y7sav2n21055 123

PL/SQL procedure successfully completed.

顺便说一句,SqlCl还有另一个更简单的解决方法:使用

alias

SQL> alias sel1=select :1 from dual;
SQL> sel1 123

:1
----------------------------------------------------
123

0
投票

你尝试过这样做吗

VARIABLE in VARCHAR2(10)
EXEC :in := 'X';
EXEC EXECUTE IMMEDIATE 'select * from dual where dummy=:1' USING :in;

如果您想获得结果,请使用此

VARIABLE in VARCHAR2(10)
VARIABLE out VARCHAR2(10)
EXEC :in := 'X';
EXEC EXECUTE IMMEDIATE 'select ''hello ''||dummy from dual where dummy=:1' INTO :out USING :in;
PRINT out
© www.soinside.com 2019 - 2024. All rights reserved.