当我使用sqlplus或任何其他工具进行编译时,如何将特殊字符保存在包中?
NLS_CHARACTERSET : WE8MSWIN1252 客户端字符设置:未知 问题是:数据表示 OS和DB : UNIX \ Oracle数据库12c企业版发行版12.1.0.2.0 -64位生产 Oracle数据库12c企业版发行版12.1.0.2.064位生产 PL/SQL版本12.1.0.2.0 -生产 核心12.1.0.2.0生产 TNS for Linux: Version12.1.0.2.0-生产 NLSRTL版本12.1.0.2.0 -生产
示例:
CREATE OR REPLACE PACKAGE BODY pkg1
AS
procedure sp
IS
v_var VARCHAR2(100);
BEGIN
v_var := '**último**';
END;
END;当我描述这个包时,如下所示:
CREATE OR REPLACE PACKAGE BODY HR.pkg1
AS
procedure sp
IS
v_var VARCHAR2(100);
BEGIN
v_var := '**£ltimo**';
END;
END;发布于 2018-02-14 10:23:56
有一种将任意unicode数据输入oracle数据库的通用方法,将自己限制在ascii字符集中:
od (linux)等cli工具生成文件内容,作为十六进制表示的八进制列表序列:
输出.副本.格式x1 -宽度=16 demo.txt
但是,输出需要一些后处理才能去掉行号和空白,这应该很简单。对于大容量数据,请使用sed或类似工具。raw数据类型。
在HEXTORAW(x)中调用PlSql是很有用的。raw数据转换为varchar2,即。数据库字符集。
使用plsql包过程utl_i18n.raw_to_char。它的第二个参数指定源编码。总之,该方法归结为类似于(测试字符串是从a到f的小写字母,后面是德国货币)的查询:
select utl_i18n.raw_to_char ( hextoraw ( '616263646566c3a4c3b6c3bcc384c396c39cc39f' ), 'AL32UTF8' ) from dual;在你的包裹里你会写:
v_var := '**' || utl_i18n.raw_to_char ( hextoraw ( 'c3ba' ), 'AL32UTF8' )
|| 'ltimo**';
-- c3ba being the utf8 encoding of unicode codepoint U+00fa,
-- 'LATIN SMALL LETTER U WITH ACUTE'显然,这种技术只在数据库字符集能够首先表示字符的情况下才有效。
快捷方式
ú和In 8859-1的例子中:
v_var := utl_i18n.raw_to_char ( 'fa‘),WE8ISO8859P1( 'WE8ISO8859P1’);UNISTR函数包装文字字符串:
v_var := TO_CHAR(‘**\00Faltimo**’)来自dual;https://stackoverflow.com/questions/48776327
复制相似问题