我们想在我们的plsql包中使用Σ符号。当我们编译包并执行时,Σ符号变为'S'。有没有办法避免这种情况?
以下是一个例子:
declare
-- Local variables here
i varchar2(10);
begin
dbms_output.put_line('hello - Σ ');
end;
输出
hello - S
答案 0 :(得分:4)
这不是有效的ASCII字符,因此您需要使用unicode,例如:
dbms_output.put_line('hello - ' || unistr('\03A3') || ' ');
请注意,dbms_output可能无法显示正确的字符,具体取决于您的字符集。
答案 1 :(得分:1)
PL / SQL源代码保存在database character set的数据库中。使用UTF-8的数据库也可以在PL / SQL源代码中使用UTF-8:
with nls_parameters as (
SELECT 1 as depth, 'SESSION' as "LEVEL", parameter, value FROM nls_session_parameters
union all
SELECT 2 as depth, 'INSTANCE' as "LEVEL", parameter, value FROM nls_instance_parameters
union all
SELECT 3 as depth, 'DATABASE' as "LEVEL", parameter, value FROM nls_database_parameters
)
select "LEVEL", parameter, '''' || value || '''' as value
from nls_parameters
where parameter = 'NLS_CHARACTERSET'
order by parameter, depth
;
LEVEL PARAMETER VALUE
-------- ---------------- ----------
DATABASE NLS_CHARACTERSET 'AL32UTF8'
示例:
$ cat /tmp/foo.sql
create procedure foo is
begin
dbms_output.put_line('hello - Σ ');
dbms_output.put_line('μεταφρασμένο από το Google!');
end;
/
$
SQL> @/tmp/foo
Procedure created.
SQL> exec foo
hello - Σ
μεταφρασμένο από το Google!
PL/SQL procedure successfully completed.
SQL>
另一个例子:
$ cat /tmp/foo.sql
create procedure fooΣ is
Σ number := 100;
begin
dbms_output.put_line('hello - Σ = ' || Σ);
dbms_output.put_line('μεταφρασμένο από το Google!');
end;
/
SQL> @/tmp/foo
Procedure created.
SQL> exec fooΣ
hello - Σ = 100
μεταφρασμένο από το Google!
PL/SQL procedure successfully completed.
SQL>
请注意,我正在使用了解UTF-8的Linux终端。