как найти длину длинного столбца в таблице - PullRequest
2 голосов
/ 25 марта 2011

У меня длинный столбец с именем FileSize в таблице с именем Files.

Для достижения цели я сделал следующее:

Я написал этот скрипт 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

Может кто-нибудь подсказать, что я делаю неправильно, так как не могу определить ключевое слово, которое мне не хватает

Спасибо.

1 Ответ

6 голосов
/ 25 марта 2011

Вам не нужно выполнять EXECUTE IMMEDIATE в этом контексте.

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 запускает отдельный оператор SQL из вашего кода PL / SQL.Он не может ничего вернуть вашему коду.Используемый вами оператор не является допустимым SQL, поэтому вы получаете ORA-00905.Это действительный код PL / SQL, и он работает так, как и ожидалось после удаления EXECUTE IMMEDIATE.

Редактировать

Код для последующего ответа на вопрос: Для этогос более чем одной строкой вы можете использовать это

DECLARE 
  CURSOR C1 IS
  SELECT filesize FROM files;
BEGIN
  FOR files IN c1
  LOOP
    DBMS_OUTPUT.PUT_LINE(LENGTH(files.filesize));
  END LOOP;
END;
/
...