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

时间:2017-09-18 13:53:51

标签: oracle stored-procedures plsql oracle-sqldeveloper

我想在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中执行它,但它们都没有回答这一点!

4 个答案:

答案 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;