如何使用select语句编写Oracle过程(特别是在SQL Developer上)?

jexiocij  于 2023-03-22  发布在  Oracle
关注(0)|答案(5)|浏览(145)

我想在SQL Developer上创建一个简单的Oracle存储过程,它将在执行简单的选择查询时返回一些记录。我不想传入任何参数,而只想将记录从过程返回到结果集中-〉一个合适的变量。
我一直在尝试使用以下语法:

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开发人员执行它,但他们都没有回答的一点!

sqyvllje

sqyvllje1#

您需要:

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
bd1hkmkf

bd1hkmkf2#

假设是最新的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

唯一的缺点是SQLDeveloper只将结果显示为文本,而不是正确的结果网格。

7vux5j2d

7vux5j2d3#

这是我在Oracle中返回游标的方式

PROCEDURE GetAllData (P_CURSOR OUT SYS_REFCURSOR)
IS
BEGIN

  OPEN P_CURSOR FOR
    SELECT *
    FROM TABLE ;

END GetAllData ;
vktxenjb

vktxenjb4#

Declare a Varchar2; 
exec Getmarketdetails2(a);

你的程序没问题;使用下面的查询来运行sp,而不是上面的查询:

Declare 
  a Varchar2(10); 
Begin
  Getmarketdetails2(a);
End;
dfddblmv

dfddblmv5#

请尝试此执行一个接一个的声明是工作在我的结束。
创建或替换过程sp_test(c1 out SYS_REFCURSOR)
作为
开始
打开c1
从用户详细信息中选择 *;
end sp_test;
/
将服务器输出设置为ON;
变量mycursor;
exec sp_test(:mycursor);
print mycursor;
输出:
用户ID用户名

相关问题