我正在尝试执行一个简单的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;
答案 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;