Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免Σ;在plsql中编译时转向S?_Plsql - Fatal编程技术网

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

如何避免Σ;在plsql中编译时转向S?,plsql,Plsql,我们打算在plsql包中使用∑符号。当我们编译包并执行时,∑符号变为“S”。有什么方法可以避免这种情况吗 以下是一个例子: declare -- Local variables here i varchar2(10); begin dbms_output.put_line('hello - Σ '); end; 输出 hello - S 这不是有效的ASCII字符,因此您需要使用unicode,例如: dbms_output.put_line('hello - ' || uni

我们打算在plsql包中使用∑符号。当我们编译包并执行时,∑符号变为“S”。有什么方法可以避免这种情况吗

以下是一个例子:

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

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

hello - S   

这不是有效的ASCII字符,因此您需要使用unicode,例如:

dbms_output.put_line('hello - ' || unistr('\03A3') || '   ');

请注意,dbms_输出可能不会显示正确的字符,具体取决于您的字符集。

PL/SQL源代码将保存到中的数据库中。使用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终端