【问题标题】:Oracle procedure, How to select a recordOracle 程序,如何选​​择记录
【发布时间】:2014-01-22 03:39:27
【问题描述】:

我在 oracle 中编写存储过程。我正在使用蟾蜍 10.6。我想得到一个记录。传递一个参数,这是id。 表 TTEST 列:{ID,VALUE}。 我的代码:

CREATE OR REPLACE PROCEDURE GB.TTEST_GET 
(
id NUMBER
)
IS
a NUMBER;
BEGIN
   --DBMS_OUTPUT.PUT_LINE('TESTING PRINT' || 234);
    SELECT ID INTO a FROM TTEST WHERE ID = id;
END TTEST_GET;
/

当我编译时,出现以下错误。 [错误] ORA-04044 (29:27): PL/SQL: ORA-04044: 此处不允许过程、函数、包或类型

【问题讨论】:

  • 参数中使用的变量名称不同,因为它与表的列名冲突!
  • 不是这个错误的原因,而是给你错误的结果。
  • 此过程是否有任何其他对象可以访问,名为TTEST_GETTTEST?尝试运行select * from all_objects where object_name in ('TTEST_GET','TTEST');

标签: sql oracle stored-procedures oracle11g oracle-sqldeveloper


【解决方案1】:

创建一个返回NUMBERFUNCTION,然后使用SQL 调用它。但返回应该是一行。

CREATE OR REPLACE FUNCTION GB.TTEST_GET (p_id NUMBER)
RETURN NUMBER
IS
a NUMBER;
BEGIN
   --DBMS_OUTPUT.PUT_LINE('TESTING PRINT' || 234);
    SELECT ID INTO a FROM TTEST WHERE ID = p_id;
    RETURN a:
END TTEST_GET;
/

并称它为,

SELECT GB.TTEST_GET(id) FROM YOURTABLE;

【讨论】:

  • 我根据您的建议更新了我的代码,然后发现以下错误:[错误] 语法检查 (2: 1):找到:'返回'预期:原样 - 或 - AUTHID DETERMINISTIC PARALLEL_ENABLE
  • 希望你没有在函数名称旁边包含参数。
  • @TugsbayarBuyadaa 你能加入聊天吗here
【解决方案2】:

您可以使用 OUT 参数从过程返回结果。伪代码如下所示

           Create or replace procedure GB.TTEST_GET (p_id number, p_a OUT number)
            is
             Begin
                  SELECT ID INTO p_a FROM TTEST WHERE ID = p_id;
             END GB.TTEST_GET ;

对于您的错误,请尝试使用适当的架构名称为表名起别名。

希望对你有帮助

维沙德

【讨论】:

  • 我更新了我的代码。发现以下错误:[Error] ORA-04044 (26: 29): PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here
  • @Tugsbayar:您是否在过程中为您的表名起别名?您也可以发布更新的代码。
  • “p_id number”应该是“p_id IN number”
猜你喜欢
  • 2011-08-20
  • 2019-03-26
  • 2020-05-29
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2012-03-08
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多