【问题标题】:How to view/verify a procedure result?如何查看/验证程序结果?
【发布时间】:2010-09-23 02:14:23
【问题描述】:

谁能解释如何查看程序的结果,一切正常,代码有效,执行和编译没有错误。现在我怎样才能将结果视为查询或任何内容。

前程序是关于工资的总和。

CREATE OR REPLACE PROCEDURE HR.TOTAL_SALARY AS    
   total_salary NUMBER(12,2);    
BEGIN    

  SET TRANSACTION READ ONLY;    

  SELECT SUM (salary) 
    INTO total_salary 
    FROM employees;    

  DBMS_OUTPUT.PUT_LINE('Total salary 1: ' || total_salary);     
  COMMIT;    

END; 

【问题讨论】:

  • 我不明白您想要“将结果视为查询或任何内容”是什么意思。该过程填充一个变量,并将其打印到屏幕上——您还需要查看什么? COMMIT 是不必要的;您没有插入、更新或删除数据。
  • 但是我怎样才能看到它是否有效? “打印到屏幕上”?我只想看看工资总额应该是691400...
  • 是的,DBMS_OUTPUT.PUT_LINE 将在屏幕上打印“总薪水 1:691400”。 IIRC,DBMS_OUTPUT 在 PLSQLDeveloper 的不同选项卡下...
  • 作为查询,我的意思是当您使用 SQL Worksheet 并选择表或特定列等时,它会直接向您显示“视图”,结果。
  • 我相信光标解决方案是您想要的,如果您想将事物显示为视图或表格将显示。例如,通过使用游标,您可以使 proc 成为报表的数据源,就像它是表或视图一样。

标签: sql oracle plsql procedures


【解决方案1】:

您是否在 SQL*Plus 中运行它?你有没有“设置服务器输出;”?

【讨论】:

  • 您在上面提到了“SQL 工作表”。这是否意味着您正在使用 Oracle SQL Developer?如果是这样,请单击 DBMS_OUTPUT 选项卡,单击启用 DBMS 输出按钮,然后再次运行该过程。确保您没有在启用 DBMS 输出的情况下打开其他工作表,否则它们可能会窃取彼此的输出。
  • 不,我正在使用 Oracle 11g Enterprise Manager,但设法应用了 dbms_output.enable (1000000);并尝试通过输入 SELECT * FROM HR.TOTAL_SALARY WHERE NAME = 'TOTAL_SALARY' ORDER BY LINE 在“SQL Worksheet”中访问它;但我收到错误:ora-04044 此处不允许过程函数包或类型
【解决方案2】:

我推荐这个功能

CREATE OR REPLACE FUNCTION HR.TOTAL_SALARY return number AS    
   total_salary NUMBER(12,2);    
BEGIN    

  SELECT SUM (salary) 
    INTO total_salary 
    FROM employees;    

return total_salary;

END; 

这个用法是这样的:

select hr.TOTAL_SALARY() as total_sal from dual.

【讨论】:

    【解决方案3】:

    要在过程中输出 select 语句的结果,您需要使用游标。

    create procedure myproc 
    (in_variable IN number, out_records OUT sys_refcursor)
    as
    begin
    open out_records for
    
    select * from mytable
    where column = in_variable;
    
    end;
    

    然后使用它,声明游标,执行proc,并输出结果。

    variable records refcursor;
    exec myproc(1, :records);
    print :records;
    

    (不能保证以上在语法上是完美的——我现在远离数据库。但它应该足够近,可以让你朝着正确的方向前进。)

    哦 - 如果适合您的环境,您可以在包内使用用户定义的光标类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多