(8.0.22)
yum install epel-release
yum install nkf
drop procedure proc1;
delimiter //
create procedure proc1()
begin
-- コメント
select 'あ';
select 'い';
select 'う';
end//
delimiter ;
nkf -w -Lu a.sql > utf8.sql
nkf -s -Lw a.sql > sjis.sql
cat utf8.sql
cat sjis.sql
od -c utf8.sql
od -c sjis.sql
source utf8.sql
source sjis.sql
show create procedure proc1\G
call proc1();
→SJIS、CRLFの場合、エラーにならないが文字化けする
→UTF8、CRLFの場合、エラーなく実行できる。ソースに\rは入らない
(19c)
yum install epel-release
yum install nkf
create or replace procedure proc1 as
val varchar2(10);
begin
-- コメント
select 'あ' into val from dual;
dbms_output.put_line('val=' || val);
select 'い' into val from dual;
dbms_output.put_line('val=' || val);
select 'う' into val from dual;
dbms_output.put_line('val=' || val);
exception when others then
raise;
end;
/
nkf -w -Lu a.sql > utf8.sql
nkf -s -Lw a.sql > sjis.sql
cat utf8.sql
cat sjis.sql
od -c utf8.sql
od -c sjis.sql
select text from dba_source
where owner = 'TEST'
and name = 'PROC1'
order by owner,name,line;
set serveroutput on
exec proc1;
→SJIS、CRLFの場合、エラーにならないが文字化けする
→UTF8、CRLFの場合、エラーなく実行できる。ソースに\rは入らない
(13)
dnf --enablerepo=powertools install nkf
create or replace procedure proc1()
language plpgsql
as $$
declare val varchar(10);
begin
-- コメント
select 'あ' into val;
raise notice 'val= %', val;
select 'い' into val;
raise notice 'val= %', val;
select 'う' into val;
raise notice 'val= %', val;
exception when others then
raise;
end;
$$;
nkf -w -Lu a.sql > utf8.sql
nkf -s -Lw a.sql > sjis.sql
cat utf8.sql
cat sjis.sql
od -c utf8.sql
od -c sjis.sql
select prosrc from pg_proc
where proname = 'proc1'
;
call proc1();
→SJIS、CRLFの場合、プロシージャ作成時にエラー
psql:sjis.sql:18: ERROR: invalid byte sequence for encoding "UTF8": 0x83
→UTF8、CRLFの場合、エラーなく実行できるが、ソースに\rが入る
(2019)
https://www.atmarkit.co.jp/ait/articles/1301/25/news092.html
notepad a.sql
create or alter procedure proc1
as
begin try
-- コメント
select 'あ';
select 'い';
select 'う';
end try
begin catch
select
error_number()
, error_severity()
, error_message()
, error_line();
end catch
nkf32 -w -Lu a.sql > utf8.sql
nkf32 -s -Lw a.sql > sjis.sql
notepad utf8.sql
notepad sjis.sql
sqlcmd -E -S localhost -d test -i utf8.sql
sqlcmd -E -S localhost -d test -i sjis.sql
select definition from sys.sql_modules
where object_id = object_id('proc1')
;
exec test.dbo.proc1;
→UTF8、LFの場合、エラーにならないが文字化けし、1行目で出力が止まる
→SJIS、LFの場合、正しく実行できる