【问题标题】:Create and execute an Oracle Stored Procedure for a select query in SQL Developer在 SQL Developer 中为选择查询创建并执行 Oracle 存储过程
【发布时间】:2018-03-09 01:15:48
【问题描述】:

我将 Oracle SQL Developer 与 Oracle 11g 一起使用。

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

这些是我面临的问题:

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

  2. 选择查询需要 SQL 开发人员中的 INTO 子句(用于复制查询结果的变量)。它是强制性的吗?

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

这是我的程序块:

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

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

  1. PLS-00103:在期待其中之一时遇到符号“DECLARE” 如下:开始函数杂注过程子类型类型 当前光标删除存在先前的外部语言 符号“begin”被替换为“DECLARE”以继续。
  2. PLS-00103:在预期以下情况之一时遇到符号“文件结束符”:( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with

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

【问题讨论】:

  • 如果是简单的选择,为什么需要程序?你也可以在变量中搅拌结果,但不要对它做任何事情,这是没有意义的。
  • 我需要在 Nhibernate C# 代码中运行它。我的实际查询涉及从双重功能中进行选择。像“从双重选择 ”!这在 Nhibernate 的直接方法中被证明是困难的,因此使用了存储过程方法!
  • 关于未使用的变量,只是检查语法。我只需要基本语法!!因此使用了一个简单的查询来澄清!

标签: oracle select stored-procedures oracle-sqldeveloper


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    Create or Replace PROCEDURE Getmarketdetails 
    AS 
      temp varchar2(20);
    BEGIN 
      SELECT 'stack overflow' INTO temp from dual;
      Dbms_output.put_line(temp);
    END Getmarketdetails;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2012-12-30
      • 2022-10-13
      • 2015-02-15
      • 2012-05-16
      • 2012-09-04
      • 2013-01-08
      相关资源
      最近更新 更多