我有下一个代码,我需要理解并做一些修改。
更具体地说,这是下一个挑战:我需要给出一种可能性,不仅可以选择数字,还需要为some的名称选择字符串。
而不是这样:
select -1 as num from dual union all我应该这样做(在本例中,名称必须包含文本而不是数字)
select 'some_text' as num from dual union all当我进行此更改时,会发生如下错误:
PL/SQL: ORA-01790:表达式必须具有与相应表达式相同的数据类型
这是一个密码
REQUEST_SCRIPT:
declare
l_data clob := request_pkg.get_request_data('panel_rza');
l_panel constant varchar2(2000) := tpl_pkg.get_block(l_data, 'panel');
l_panels clob;
l_count integer := 0;
begin
l_panels := '
';
for c in(
select 9 as num from dual union all
select -1 as num from dual union all
select 2 as num from dual union all
select 4 as num from dual union all
select 19 as num from dual union all
select 23 as num from dual union all
select 18 as num from dual union all
select 22 as num from dual union all
select 8 as num from dual union all
select -3 as num from dual union all
select 20 as num from dual union all
select -2 as num from dual union all
select 24 as num from dual
) loop
dbms_lob.append(l_panels, replace(l_panel, '{num}', c.num));
select count(*)
into l_count
from dual
where exists(
select *
from v_scheme_element_panel
where upper(fk_table_name) = upper('panel_rza_' || c.num)
and upper(type) = 'BLINKER'
and upper(value) = 'ON'
);
if(l_count = 1) then
tpl_pkg.set_block(l_panels, 'active', tpl_pkg.get_block(l_panel, 'active'));
tpl_pkg.clear_block(l_panels, 'inactive');
else
select count(*)
into l_count
from dual
where exists(
select *
from v_scheme_element_panel
where upper(fk_table_name) = upper('panel_rza_' || c.num)
and upper(type) = 'BLINKER'
and upper(value) = 'CLOSED'
);
if(l_count = 1) then
tpl_pkg.set_block(l_panels, 'inactive', tpl_pkg.get_block(l_panel, 'inactive'));
tpl_pkg.clear_block(l_panels, 'active');
else
tpl_pkg.clear_block(l_panels, 'active');
tpl_pkg.clear_block(l_panels, 'inactive');
end if;
end if;
end loop;
:result := '<dialog id="dialog_panel_rza"><title>Выбор Панелей РЗА</title><text><![CDATA[';
dbms_lob.append(:result, l_data);
tpl_pkg.set_block(:result, 'panel', l_panels);
dbms_lob.append(:result, ']]></text></dialog>');
end;REQUEST_CODE:
<table>
<!-- BEGIN panel -->
<tr>
<td>
<a href="javascript: request('panel_rza_{num}'); dialog_close('dialog_panel_rza');">Панель управления РЗА № {num}</a>
</td>
<td>
<td align="right">
<!-- BEGIN active --><img height="24" src="./images/panel/panel_rza_alarm.png"><!-- END active -->
<!-- BEGIN inactive --><img height="24" src="./images/panel/panel_rza_inactive.png"><!-- END inactive -->
</td>
</tr>
<!-- END panel -->
</table>TPL_PKG:
function get_block(
p_text clob,
p_block_name varchar2
) return clob
is
l_block_text clob;
begin
l_block_text := regexp_substr(p_text, '<!-- BEGIN '||p_block_name||' -->.*<!-- END '||p_block_name||' -->',1,1,'inm');
l_block_text := replace(l_block_text, '<!-- BEGIN '||p_block_name||' -->');
l_block_text := replace(l_block_text, '<!-- END '||p_block_name||' -->');
return l_block_text;
end;

谢谢
发布于 2015-08-25 13:30:22
当您有不同的数据类型时,应该使用to_char。
select to_char(1) from dual
union all
select 'abc' from dualhttps://stackoverflow.com/questions/32205251
复制相似问题