118

次のコードを実行すると、手順が完了したと表示され、必要な情報 (firstName, lastName) が出力されず、下の表の選択クエリからの他の値が出力されません。

 CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,   
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
 AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
 a.actorID = id_actor;
BEGIN
FOR row IN quote_recs LOOP
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');

end loop;
END PRINT_ACTOR_QUOTES;
/ 

サーバー出力をオンに設定すると、

a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName

複数回!

4

8 に答える 8

222

「手続きが完了したと言っているだけ」という文の「それ」とは何ですか?

デフォルトでは、ほとんどのツールはdbms_output書き込み用のバッファーを構成せず、コードの実行後にそのバッファーからの読み取りを試みません。一方、ほとんどのツールにはそうする機能があります。SQL * Plusでは、コマンドを使用する必要がありますset serveroutput on [size N|unlimited]。だからあなたは次のようなことをするでしょう

SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );

SQL DeveloperではView | DBMS Output、DBMS出力ウィンドウを有効にし、緑色のプラスアイコンを押して特定のセッションのDBMS出力を有効にします。

さらに、すべての行にリテラル「a.firstNamea.lastName」を出力したくないと仮定すると、おそらく

FOR row IN quote_recs
LOOP
  DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;
于 2012-05-03T15:30:51.320 に答える
33
  1. メニューバーの表示オプションから Dbms 出力ウィンドウが開いていることを確認します。
  2. 緑色の「+」記号をクリックして、データベース名を追加します。
  3. 「DBMS_OUTPUT.ENABLE;」と書きます。手順内の最初の行として。これで問題が解決することを願っています。
于 2016-05-23T07:29:10.620 に答える
18

この文

DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');

文字列をそのまま出力することを意味します。引用符を削除して、出力する値を取得します。したがって、正しい構文は次のとおりです

DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);
于 2012-05-09T05:59:10.870 に答える