首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ORA-01790数据类型:如何添加在名称中使用文本的功能,而不仅仅是数字

ORA-01790数据类型:如何添加在名称中使用文本的功能,而不仅仅是数字
EN

Stack Overflow用户
提问于 2015-08-25 13:24:25
回答 1查看 242关注 0票数 0

我有下一个代码,我需要理解并做一些修改。

更具体地说,这是下一个挑战:我需要给出一种可能性,不仅可以选择数字,还需要为some的名称选择字符串

而不是这样:

代码语言:javascript
运行
复制
select -1 as num from dual union all

我应该这样做(在本例中,名称必须包含文本而不是数字)

代码语言:javascript
运行
复制
select 'some_text' as num from dual union all

当我进行此更改时,会发生如下错误:

PL/SQL: ORA-01790:表达式必须具有与相应表达式相同的数据类型

这是一个密码

REQUEST_SCRIPT:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
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;

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 13:30:22

当您有不同的数据类型时,应该使用to_char

代码语言:javascript
运行
复制
select to_char(1) from dual
union all
select 'abc' from dual
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32205251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档