无法在oracle 10 g中执行proc

时间:2018-04-11 10:19:34

标签: oracle plsql oracle10g

我正在尝试执行一个简单的proc在oracle 10g中这样但是无法获取错误PLS-00905:对象dbnew.sp_TDCCountry无效任何想法都将被赞赏 表

CREATE TABLE TDCCountry
( CountryID number(10) NOT NULL,
  CountryName varchar2(50) NOT NULL  
);

程序

CREATE OR REPLACE PROCEDURE SP_TDCCountry 
IS
BEGIN  
select * from tdcCountry;
COMMIT;
 END SP_TDCCountry;

执行 1。

begin
   SP_TDCCountry;
  end;

2。exec SP_TDCCountry;

1 个答案:

答案 0 :(得分:2)

因为您没有into子句,您可以通过该子句将值返回到某些变量。将变量作为rowtype返回可能是合适的[顺便提一下non-DDL(在这种情况下,那里是SELECT)语句不需要提交。

因此,您可以按以下方式使用:

SQL> set serveroutput on;
SQL> CREATE OR REPLACE PROCEDURE SP_TDCCountry IS
      v_row tdcCountry%rowtype;
BEGIN
      select * into v_row from tdcCountry;
      dbms_output.put(v_row.countryid||' - ');
      dbms_output.put_line(v_row.countryname);
END;
/
SQL> exec SP_TDCCountry;

如果您的SELECT语句带有多行,那么通过cursor返回数据是正确的:

SQL> CREATE OR REPLACE PROCEDURE SP_TDCCountry IS
      v_row tdcCountry%rowtype;
BEGIN
      for c in ( select * from tdcCountry )
      loop
       dbms_output.put(c.countryid||' - ');
       dbms_output.put_line(c.countryname);
      end loop; 
END;
/
SQL> exec SP_TDCCountry;