在SQL Developer中为选择查询创建并执行Oracle存储过程

时间:2017-09-27 13:55:10

标签: oracle select stored-procedures oracle-sqldeveloper

我正在使用Oracle SQL Developer和Oracle 11g。

我面临一个奇怪的问题,为Select查询创建一个简单的存储过程,不需要任何输入参数。它只是从“双”表中选择用户定义的函数。

这些是我面临的问题:

  1. 我无法创建没有输入参数的过程(因为我不需要在select中使用任何参数值!)。但是语法不允许我有零参数,它需要REF_CURSOR输出参数。 REF_CURSOR是SQL Developer程序中的必修课吗?是否与涉及Select查询的程序有关?

  2. select查询需要在SQL开发人员中使用INTO子句(复制查询结果的变量)。这是强制性的吗?

  3. 即使我使用了INTO子句,我也无法弄清楚声明临时变量以将查询结果复制到此变量的语法。这样我就可以在我的程序片段中使用此 out 变量。

  4. 这是我的程序块:

    Create or Replace PROCEDURE Getmarketdetails
    AS
    DECLARE temp varchar;
    BEGIN
      SELECT *
      INTO temp from  dual;
    END Getmarketdetails;
    

    我在编写程序时遇到这些错误:

    1. PLS-00103:期待其中一个时遇到符号“DECLARE” 以下内容:begin function pragma procedure子类型      当前游标删除存在于外部语言之前 符号“begin”代替“DECLARE”继续。
    2. PLS-00103:当遇到以下情况之一时遇到符号“文件结束”:(如果使用<&lt,则循环mod为null,如果循环模式为空,则编译返回选择更新;继续关闭当前删除提取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除。
    3. 我需要的只是完美的脚本语法,为此创建存储过程,并使用 exec 命令执行它。以及对上述问题的一些澄清。感谢有人可以帮忙! :)

2 个答案:

答案 0 :(得分:3)

您的语法不正确 - 您需要声明varchar的长度,而不需要声明。

Create or Replace PROCEDURE Getmarketdetails
AS
temp varchar(100);
BEGIN
  SELECT *
  INTO temp from  dual;
END Getmarketdetails;

答案 1 :(得分:0)

Create or Replace PROCEDURE Getmarketdetails 
AS 
  temp varchar2(20);
BEGIN 
  SELECT 'stack overflow' INTO temp from dual;
  Dbms_output.put_line(temp);
END Getmarketdetails;

在您的程序中完成了一些修改。不要根据需要编写声明和提及变量。