首页 文章

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

提问于
浏览
0

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

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

这些是我面临的问题:

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

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

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

这是我的程序块:

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

我在编译过程时遇到这些错误:

  • PLS-00103:遇到以下其中一项时遇到符号"DECLARE":开始函数编译指示过程子类型类型当前游标删除存在先于外部语言符号"begin"替换"DECLARE"继续 .

  • PLS-00103:当遇到以下情况之一时遇到符号"end-of-file" :(开始情况声明结束异常退出goto if loop mod null pragma raise return select update with with << continue close current delete fetch lock insert open rollback savepoint set sql执行commit forall merge pipe purge .

我只需要完美的脚本语法来为此创建存储过程,并使用exec命令执行它 . 以及对上述问题的一些澄清 . 感谢有人可以帮忙! :)

2 回答

  • 3

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

    Create or Replace PROCEDURE Getmarketdetails
    AS
    temp varchar(100);
    BEGIN
      SELECT *
      INTO temp from  dual;
    END Getmarketdetails;
    
  • 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;
    

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

相关问题