我想在SQL Developer上创建一个简单的Oracle Stored过程,它将在一个简单的select查询中返回一些记录。我不想传入任何参数,但我只想将记录从过程返回到结果集 - >一个合适的变量。
我一直在尝试使用以下语法:
create or replace PROCEDURE Getmarketdetails2(data OUT varchar2)
IS
BEGIN
SELECT *
into data
from dual;
END Getmarketdetails2;
但是当我尝试使用以下exec语句执行时,它会给我一个错误 - >
Declare a Varchar2;
exec Getmarketdetails2(a);
错误: PLS-00103:遇到“别的东西”时遇到符号“文件结束”。
原因:通常是PL / SQL编译错误。
感谢是否有人可以帮助我摆脱这个漫长的待决状态!我已经尝试了足够的基本指南来创建一个简单的Oracle存储过程并在SQL Developer中执行它,但它们都没有回答这一点!
答案 0 :(得分:1)
你想:
DECLARE
a VARCHAR2(4000); -- Give it a size
BEGIN -- Begin the anonymous PL/SQL block
Getmarketdetails2(a); -- Call the procedure
DBMS_OUTPUT.PUT_LINE( a ); -- Output the value
END; -- End the anonymous PL/SQL block
/ -- End the PL/SQL statement
或:
VARIABLE a VARCHAR2(4000); -- Create a bind variable
EXEC Getmarketdetails2(:a); -- Execute the procedure using the bind variable
PRINT a -- Print the bind variable
答案 1 :(得分:1)
假设有最新的Oracle版本,您可以使用dbms_sql.return_result()
create or replace PROCEDURE Getmarketdetails2
IS
c1 SYS_REFCURSOR;
BEGIN
OPEN c1 FOR
SELECT *
from dual;
DBMS_SQL.RETURN_RESULT(c1);
END Getmarketdetails2;
/
然后只需运行
exec Getmarketdetails2
唯一的缺点是SQL Developer只将结果显示为文本,而不是正确的结果网格。
答案 2 :(得分:1)
这是我在Oracle中返回游标的方法
PROCEDURE GetAllData (P_CURSOR OUT SYS_REFCURSOR)
IS
BEGIN
OPEN P_CURSOR FOR
SELECT *
FROM TABLE ;
END GetAllData ;
答案 3 :(得分:0)
Declare a Varchar2;
exec Getmarketdetails2(a);
你的手术还可以; 而不是上面的查询,使用下面的查询来运行sp:
Declare
a Varchar2(10);
Begin
Getmarketdetails2(a);
End;