2

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 type current cursor delete presents previous external languageシンボル「begin」は、「DECLARE」の代わりに使用されました。

エラー(14,8):PLS-00103:次のいずれかが必要な場合にシンボル「ファイルの終わり」が発生しました:(ループmodnullプラグマが<<を使用しているときにreturnselect updateを発生させる場合、gotoの終了例外終了を宣言します。続行閉じる現在の削除フェッチロック挿入オープンロールバックセーブポイントセットSQL実行コミットforallマージパイプパージ

どうしたの?

4

2 に答える 2

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
于 2012-10-29T03:38:16.667 に答える
1

コードには、次の点を確認する必要があります。まず。@Polppanがすでに述べたように、DECLAREストアドプロシージャからキーワードを削除します。それは必要ありません。ただし、匿名のPL/SQLブロックを作成する場合は必要になります。2番。プロシージャで行を表示するために使用する場合dbms_output.enable()、これにはsql * plusを使用していると思います。呼び出す必要がありますdbms_output.get_lines()。そうしないと、目的の結果が得られません。したがって、それを単純化するにset serveroutput onは、sql*plusのコマンドを使用して出力を有効にします。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> 
于 2012-10-29T06:13:48.747 に答える