使用PL / SQL Developer客户端。
Oracle抛出ORA-065550 PLS-00103遇到符号“SELECT”。
好吧,在这里找不到什么问题。
DECLARE someId NUMBER;
BEGIN
select id into someId from someTable where someColumn = 'someUniqueValue';
select * from someTable; --here
END;
select * from someTable; --or here
没有第二个选择,也没有第三个选择。当我dmbs_output someId进入控制台时它运行良好,这将分配给声明的变量。但为什么我不能在'进入'之后选择?我想宣布一个时间值,然后制作
select * from someTable where id = someId
或者被准备好想要进行千次插入,我想缓存第一次选择。
DECLARE someId NUMBER;
BEGIN
select id into someId from someTable where someColumn = 'someValue';
END;
/
select * from otherTable where otherTableId = someId;
我猜这里失去了一些范围。
答案 0 :(得分:1)
假设你正在编写一个sql脚本,你可以
1)声明你的变量 2)在匿名的pl / sql块中填充它 3)在别处使用
--1
variable my_num number
--2
begin
select 1 into :my_num from dual;
end;
/
--3
select :my_num from dual;
答案 1 :(得分:1)
基本上你在做这段代码时犯了很多错误。
1.你不能在匿名区块中'SELECT *'
。你需要有光标才能做到这一点。
2.你的变量范围直到匿名块。现在您尝试访问块外的变量 - > NAAH不可能。
所以我试图通过以下代码解决您的问题,希望它有所帮助。
DECLARE
someId NUMBER;
p_lst sys_refcursor;
BEGIN
SELECT id INTO someId FROM someTable WHERE someColumn = 'someUniqueValue';
OPEN p_lst FOR
'SELECT * FROM someTable
where otherTableId = '||someId;
END;
答案 2 :(得分:1)
您可以通过使用SQL * Plus
来实现SQL> variable id number
SQL> begin
select 1000 into :id from dual;
end;
/
SQL> print id
ID
----------
1000
SQL> SELECT * FROM tbl_a WHERE id = :id
在Oracle中,不允许您隐式返回查询结果。结果总是必须以某种方式显式返回。最简单的方法是使用DBMS_OUTPUT(大致相当于print)输出变量:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
但是,如果您尝试返回结果集,这并非常有用。在这种情况下,您要么返回集合或refcursor。但是,使用这些解决方案中的任何一个都需要将代码包装在函数或过程中,并从能够消耗结果的东西中运行函数/过程。以这种方式工作的函数可能如下所示:
CREATE FUNCTION my_function (myname in varchar2)
my_refcursor out sys_refcursor
BEGIN
open my_refcursor for
SELECT *
FROM Customers
WHERE Name = myname;
return my_refcursor;
END my_function;