我们在plsql中编译时如何避免Σ转向S?

时间:2014-12-17 05:56:30

标签: plsql

我们想在我们的plsql包中使用Σ符号。当我们编译包并执行时,Σ符号变为'S'。有没有办法避免这种情况?

以下是一个例子:

declare 
-- Local variables here
i varchar2(10);
begin

dbms_output.put_line('hello - Σ   ');
end;

输出

hello - S   

2 个答案:

答案 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终端。