2012-10-29 34 views
1

我想跟隨在http://dba-oracle.com/t_pl_sql_plsql_select_into_clause.htm輸出單個行中的存儲過程(甲骨文)

的例子但是,當我做不過

create or replace PROCEDURE age 
is 
declare 
info movie%rowtype; 
BEGIN 
dbms_output.enable(); 
select * into info from movie where mo_id=1; 

dbms_output.put_line('The name of the product is ' || info.mo_id); 

END age; 

/

它提供了幾個錯誤:

錯誤(4,1):PLS-00103:在期待以下某項時遇到符號「DECLARE」:begin function pragma procedure subtype t ype當前光標刪除在外部語言之前存在符號「begin」代替「DECLARE」繼續。

錯誤(14,8):PLS-00103:出現符號「結束文件」在需要下列之一時:(開始情況下宣佈結束退出異常用於轉到如果循環國防部空編譯提高收益選擇更新而與< <繼續關閉當前刪除獲取鎖芯打開回滾保存點設置SQL執行提交FORALL合流管清洗

這有什麼錯呢?

回答

3

與後續的嘗試您不需要在程序中聲明。

create or replace PROCEDURE 
age 
is 
info movie%rowtype; 
BEGIN 
--dbms_output.enable(); 
select * into info from movie where mo_id=1; 

dbms_output.put_line('The name of the product is ' || info.mo_id); 

END age; 
/

,並執行你可以做

exec age 
1

的過程有幾件事情在你的代碼來看看: 第一。正如@Polppan已經提到,從存儲過程中刪除DECLARE關鍵字。沒有必要。但是,當您編寫匿名PL/SQL塊時,您將需要它。第二。如果您在過程中使用dbms_output.enable()然後顯示的行,我假設你正在使用SQL * Plus這一點,你需要調用dbms_output.get_lines()否則它不會給你想要的結果。因此,要簡化SQL *的是使用set serveroutput on命令,以及使能輸出。不要混用dbms_output.enable()setserveroutput on - 使用他們的任何。不是都。這裏有一個例子:

SQL> CREATE OR REPLACE PROCEDURE Print_data 
    2 is 
    3 l_var_1 varchar2(101); 
    4 BEGIN 
    5 select 'Some data' 
    6  into l_var_1 
    7  from dual; 
    8 dbms_output.put_line(l_var_1); 
    9 END; 
10/

Procedure created 

SQL> set serveroutput on; 
SQL> exec print_data; 

Some data 

PL/SQL procedure successfully completed 

SQL>