我有这样的程序:
DECLARE
r_template_row template_version_row%rowtype;
r_tag_row tag%rowtype;
string_insert varchar2(5000);
v_rownumber number;
BEGIN
string_insert := 'insert into template_version(id, name, created_by, created, deleted, rew, filename) values (2, ''new_template'', 1, SYSDATE, ''N'', 1, ''new_template.xls'')';
DBMS_OUTPUT.PUT_LINE(string_insert);
for r_template_row in (select * from template_version_row)
loop
v_rownumber := ID_Generator.nextval;
string_insert := 'insert into template_version_row(id, template_version_id, row_number, name, view_type_id, product_id, created_by, created, deleted, rev, sheet_leg_type) values ('||v_rownumber ||', 2, '|| r_template_row.ROW_NUMBER ||', '||r_template_row.NAME ||', '|| r_template_row.VIEW_TYPE_ID ||', '|| r_template_row.PRODUCT_ID ||', 1, Sysdate,''N'', 1, '||r_template_row.SHEET_LEG_TYPE_ID ||')';
DBMS_OUTPUT.PUT_LINE(string_insert);
for r_tag_row in (select * from tag where TEMPLATE_VERSION_ROW_ID = r_template_row.ID)
loop
string_insert := 'insert into tag(id, template_version_row_id, name, tag, tag_value_position_id, data_format, tag_type_id, segment, ipt_table_id, column_name, tag_order, separator, parameter_tag, leg_type_id, segment_template_vers_row_id, created_by, created, deleted, rev, is_mandatory, is_value_mandatory, is_returned_by_get_quote) values (ID_Generator.nextval,'|| v_rownumber ||', '||
r_tag_row.NAME ||', '
|| r_tag_row.TAG ||', '
|| r_tag_row.DATA_FORMAT ||', '
|| r_tag_row.TAG_TYPE_ID ||','
|| r_tag_row.SEGMENT||', '
|| r_tag_row.IPT_TABLE_ID ||', '
|| r_tag_row.COLUMN_NAME ||', '
|| r_tag_row.TAG_ORDER||', '
|| r_tag_row.SEPARATOR ||', '
|| r_tag_row.PARAMETER_TAG ||', '
|| r_tag_row.LEG_TYPE_ID || ','
|| r_tag_row.LEG_TYPE_ID||', '
|| r_tag_row.SEGMENT_TEMPLATE_VERS_ROW_ID
|| ', 1 , Sysdate, ''N'', 1, '
|| r_tag_row.IS_MANDATORY || ', '
|| r_tag_row.IS_VALUE_MANDATORY||', '
|| r_tag_row.IS_RETURNED_BY_GET_QUOTE||' )';
DBMS_OUTPUT.PUT_LINE(string_insert);
end loop;
end loop;
END;
/
我需要在插入空值,如果游标。值是空的。有人知道如何解决这个问题。在目前的代码,如果游标是空的,那么空字符串是连接在结果。谢谢帮助。PS:我试过colaesce函数,它抱怨我使用varchar列。
2条答案
按热度按时间ecbunoof1#
您可以使用
COALESCE
。对于不是字符串的列,请使用TO_CHAR
将其显式转换为字符串,因此COALESCE
只能处理字符串。sd2nnvve2#
您正在创建动态查询,如果某些
cursor.value
为空,则它不会输入任何值,而是在值子句中输入,,
或(,
或,)
。您可以在执行之前替换它们,如下所示: