2

FilesというテーブルにFileSizeという名前のLONG列があります。

目的を達成するために、私は次のことを行いました:

サイズを見つけるためにこのPL/SQLスクリプトを作成しました

declare 
long_var LONG:=0;
begin
dbms_output.put_line(length(long_var));
  execute immediate 'SELECT FILESIZE INTO long_var FROM FILES';
    dbms_output.put_line(length(long_var));
end;

しかし、それはエラーをスローします:

ORA-00905: missing keyword
ORA-06512: at line 5

以下のリンクでフォローしているのを見たので、私は次のことをしていました: http ://www.techonthenet.com/oracle/questions/long_length.php

欠落しているキーワードを特定できないため、誰かが私が間違っていることを示唆できますか?

ありがとう。

4

1 に答える 1

6

このコンテキストでは、EXECUTEIMMEDIATEは必要ありません。

DECLARE 
long_var long:=0;
BEGIN
  DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
  SELECT filesize INTO long_var FROM files;
  DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
END;
/

EXECUTE IMMEDIATEは、PL/SQLコードからSQLのスタンドアロン文を実行します。コードに何も返すことはできません。使用しているステートメントは有効なSQLではないため、ORA-00905を取得します。これは有効なPL/SQLコードであるため、EXECUTEIMMEDIATEが削除されると期待どおりに機能します。

編集

質問のフォローのコード:複数の行でこれを行うには、これを使用できます

DECLARE 
  CURSOR C1 IS
  SELECT filesize FROM files;
BEGIN
  FOR files IN c1
  LOOP
    DBMS_OUTPUT.PUT_LINE(LENGTH(files.filesize));
  END LOOP;
END;
/
于 2011-03-25T10:05:09.337 に答える