我似乎无法在Oracle PL / SQL where子句中使用变量。我来自Microsoft SQL Server背景,很简单。例如,执行类似以下操作所需的所有步骤是什么?
declare @var int set @var = 1
select * from SomeTable where SomeField = @var
这似乎不应该在PL / SQL中很难,但显然它是。 : - /我听说我需要在PL / SQL中使用游标等吗?
非常感谢任何帮助。感谢。
答案 0 :(得分:10)
您想对SELECT返回的数据做什么?如果您只想查看它,根本不需要PL / SQL,只需在SQL Plus中执行此操作:
variable var number
exec :var := 1
select * from SomeTable where SomeField = :var;
或者在像SQL Developer或Toad这样的工具中,只需执行以下操作:
select * from SomeTable where SomeField = :var;
,它将提示您输入:var。
的值答案 1 :(得分:5)
以下代码声明了要在var
子句中使用的变量WHERE
,并且将结果放入变量result
然后在PL / SQL块中执行它。
DECLARE
var INT := 1;
result INT;
BEGIN
SELECT 123
INTO result
FROM DUAL
WHERE var = 1;
DBMS_OUTPUT.put_line (var);
DBMS_OUTPUT.put_line (result);
END;
DBMS_OUTPUT.PUT_LINE
调用使它产生这个DBMS输出:
1
123
答案 2 :(得分:2)
declare
type t_rec is record
(
col1 number,
col2 myTable.col2%type
);
v_rec t_rec;
type t_tab is table of v_rec%type index by binary_integer;
v_tab t_tab;
begin
select col1, col2
bulk collect into v_tab
from myTable
where col3 = 'BLAH';
-- do something great with v_tab...
end;
另外要知道,如果您尝试选择(或批量收集)变量并且没有返回任何行,您将获得no_data_found异常,因此您可能希望处理这种情况。
请参阅pl / sql集合上的more here。上面使用了一个关联数组,但也有嵌套的表和varrays。再次,请参阅链接。
希望有所帮助。
答案 3 :(得分:1)
我像这样使用它
select * from sec_mainmenu where serno = '&MENU_ID';
当你运行它时,pl / sql将提示输入MENU_ID值。