2013-08-29 4 views
0

У меня есть столбец в таблице по имени цвета, который имеет различные значения, такие как «Красный», «Зеленый», «Синий», «Желтый».Создание имен переменных Динамически - Postgresql

Мне нужно знать, как динамически создавать имена переменных по их отдельным значениям.

Каждое имя переменной будет значением.

В приведенном выше случае должны быть созданы четыре имени переменной, т. Е. «Красный», «Зеленый», «Синий», «Желтый».

быть ясно

В основном это объявить переменные в объявлении раздела, где имена переменных могут быть динамическими

+1

и как вы будете использовать эти переменные, если вы не знаете имена (если это не динамический запрос)? –

+1

Поскольку PostgreSQL не имеет «переменных» как таковых, есть ли вероятность, что вы можете объяснить немного больше? Возможно, набросайте схему того, как вы хотите, чтобы код работал? –

+0

В основном это объявление переменных в разделе объявления, где имена переменных могут быть динамическими. – user2664380

ответ

1

Предполагая, что контекст является plpgsql язык, это не возможно, чтобы иметь динамическое содержимое в DECLARE раздел.

В любом случае динамически созданные переменные используются редко, даже если они технически возможны. В других интерпретируемых языках общим способом решения проблемы с переменным числом переменных является использование map (perl) или array (php), индексированных по именам, так же, как и имена переменных.

В plpgsql вы можете использовать тип hstore как ближайший эквивалент.

Пример:

DECLARE 
    vars hstore:=hstore(''); 
BEGIN 
    -- assign a pseudo-variable with name='Blue' and value='abc' 
    vars:=vars||'Blue=>abc'; 
    -- load values from a query selecting names and associated values 
    for color,val in select * from colors 
    loop 
    vars:=vars||(color=>val::text); 
    end loop; 
    -- Get the value of the pseudo-variable for 'Red', assuming it came out 
    -- in the query's results 
    raise notice 'the value for Red is: %', vars->'Red'; 
END; 

Основной недостаток по сравнению с реальными переменными является то, что есть только один тип для содержания: text. Значения должны выполняться динамически, если text не подходит.

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