Этот синтаксис не работает:Как установить значения по умолчанию для каждого столбца таблицы?
select nvl(student.*,0)
from student ;
Как я могу применить функцию NVL() для каждого столбца в таблице СТУДЕНТ?
Этот синтаксис не работает:Как установить значения по умолчанию для каждого столбца таблицы?
select nvl(student.*,0)
from student ;
Как я могу применить функцию NVL() для каждого столбца в таблице СТУДЕНТ?
Мы не можем этого сделать. Нам нужно напечатать все столбцы и их отдельные функции NVL(). Я знаю, что это похоже на много усилий, но подумайте о том, что произойдет, если какой-либо из ваших столбцов будет DATE или каким-то другим «экзотическим» типом данных.
Если у вас есть много столбцов, и вы действительно хотите, чтобы сэкономить усилия, которые вы могли бы генерировать пункты из словаря данных:
select 'nvl('|| column_name || ', 0)'
from user_tab_columns
where table_name = 'STUDENT'
order by column_id;
Cut'n'paste результирующего набора в редакторе.
После того, как вы начнете по этому маршруту легко получить более изощренными:
select case when column_id > 1 then ',' end ||
'nvl('|| column_name || ',' ||
case when data_type = 'DATE' then 'sysdate'
when data_type = 'VARCHAR2' then '''DEF'''
else '0' end ||
')'
from user_tab_columns
where table_name = 'STUDENT'
order by column_id;
Вероятно, что-то вроде этого (если вы на 11g), если вы собираетесь писать PL/SQL, либо просто dbms_output.put_line
переменную l_query
, чтобы получить ваш запрос и выполнить it-
Это даст вам запрос с использованием всех столбцов NVL
-
SELECT 'SELECT '|| listagg ('nvl('||column_name, ',0),')
WITHIN GROUP (ORDER BY column_name) ||',0) FROM TABLE1'
FROM all_tab_columns
WHERE table_name='TABLE1';
И это реализация внутри PL/SQL-
DECLARE
v_record table1%rowtype;
BEGIN
SELECT 'SELECT '|| listagg ('nvl('||column_name, ',0),')
WITHIN GROUP (ORDER BY column_name) ||',0) FROM TABLE1'
INTO l_query
FROM all_tab_columns
WHERE table_name='TABLE1';
l_query := l_query ||' WHERE rownum<=1000'; --add where clause if you want to
OPEN tab_cursor FOR l_query;
LOOP
FETCH tab_cursor INTO v_record;
EXIT WHEN tab_cursor%NOTFOUND;
END LOOP;
--Do something with v_record
END;
/
Вы можете задать свой вопрос, пожалуйста? Вы хотите выбрать пустые значения или вставить? – Tatiana
нравится [это] (http://stackoverflow.com/questions/26064254/select-all-columns-except-null-or-nvl-all-null)? – SomeJavaGuy
Зачем вы ставите нулевые значения во всех столбцах? – brenners1302