2012-03-01 2 views
0
DECLARE 
TYPE t IS RECORD (
col_name VARCHAR2 (100) 
); 

    t_row t; 
    cname VARCHAR (100) := 'col_name'; 
BEGIN 
    t_row.col_name    := 'col'; 
DBMS_OUTPUT.put_line ('out'); 

    IF t_row.cname IS NULL THEN 
    DBMS_OUTPUT.put_line ('in'); 
    END IF; 
END; 

Ошибка в строке 1
ОРА-06550: строка 12, столбец 12:
PLS-00302: компонент 'CNAME' должна быть объявлена ​​
ORA-06550: строка 12, столбец 3:
PL/SQL: Заявление игнорировалДинамическое имя столбца для записи типа переменной

Как я могу назначить динамическое имя столбца к типу переменной записи?

+1

вы знаете, во время компиляции ВАЗе t названы поля записи, почему вы не можете просто использовать их в своем коде? –

ответ

2

Вы можете сделать это с помощью динамического SQL:
Чтобы сделать пример проще я сделать свой тип TĀ объекта схемы (но в основном вы не должны - вы можете поместить его в динамической части, а)

create or replace type t is object(col_name varchar2(100)); 
/

Тогда вы можете посмотреть на этот скрипт:

declare 
    t_row t; 
    cname varchar2(100) := 'col_name'; 
begin 

    t_row := new t('col'); 

    execute immediate 'declare t_in t := :0; begin if t_in.' || cname || 
        ' is null then dbms_output.put_line(''in''); end if; end;' 
    using t_row; 
end; 

Хотя, я должен сказать, что это странное требование ...

1

Ошибка в том, что record t не имеет поля cname, но col_name:

type t is record (
    col_name varchar2(100) 
); 

Один должны знать поля записи во время компиляции.

Не могли бы рассказать нам, что представляет собой реальную проблему, которую вы собираетесь решить?

+0

Спасибо, на самом деле я также знаю, что запись t vairable должна использоваться с col_name, но в моей ситуации я получаю имя столбца из другой таблицы и проверяю, не является ли значение записи с этим именем столбца. И если вы видели, что cname имеет значение col_name, то же самое, что имя столбца записи –

+0

t_row.cname, но cname имеет значение col_name, это мое требование, чтобы динамически cname ссылалось на pl/sql –

Смежные вопросы