Sql ORA-01790数据类型:如何添加在名称中使用文本而不仅仅是数字的功能
我还有下一个需要理解和修改的代码 更具体地说,下一个挑战是: 我需要提供不仅选择数字,而且选择某个面板名称的字符串的可能性 与此相反:Sql ORA-01790数据类型:如何添加在名称中使用文本而不仅仅是数字的功能,sql,regex,oracle,plsql,sqldatatypes,Sql,Regex,Oracle,Plsql,Sqldatatypes,我还有下一个需要理解和修改的代码 更具体地说,下一个挑战是: 我需要提供不仅选择数字,而且选择某个面板名称的字符串的可能性 与此相反: select -1 as num from dual union all 我应该这样做在这种情况下,名称必须包含文本而不是数字 select 'some_text' as num from dual union all 进行此更改时,会出现如下错误: PL/SQL:ORA-01790:表达式必须具有与相应表达式相同的数据类型 表情 这是一个密码 请求\u脚本
select -1 as num from dual union all
我应该这样做在这种情况下,名称必须包含文本而不是数字
select 'some_text' as num from dual union all
进行此更改时,会出现如下错误:
PL/SQL:ORA-01790:表达式必须具有与相应表达式相同的数据类型
表情
这是一个密码
请求\u脚本:
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;
请求代码:
<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_包装:
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;
谢谢当您有不同的数据类型时,您应该使用to_char
select to_char(1) from dual
union all
select 'abc' from dual
如果要混合使用字符串和数字,必须将数字显式转换为字符串,即: select to_char(9) as num from dual union all select to_char(-1) as num from dual union all select to_char(2) as num from dual union all select 'some_text' as num from dual union all
哇,真管用。正如你所说,我把所有的数字翻译成文本