6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-22 21:43:06 +01:00
firebird-qa/files/gtcs-cast-gen-ddl.sql

397 lines
30 KiB
MySQL
Raw Permalink Normal View History

set bail on;
--set echo on;
create or alter procedure sp_gen_code returns(txt varchar(4000)) as begin end;
recreate table tdata(
id int generated by default as identity constraint tdata_pk primary key
,inp_type varchar(30)
,inp_name varchar(31) default 'a'
,out_type varchar(30)
,out_name varchar(31) default 'b'
,sp_body varchar(255)
,inp_arg varchar(100)
);
commit;
------------------------
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'smallint', 'int' , '[a]/3' , '-0x8000' from rdb$database union all
select 'smallint', 'int' , '[a]/3' , '0x7FFF' from rdb$database union all
select 'smallint', 'bigint' , '[a]/3' , '0x7FFF' from rdb$database union all
select 'smallint', 'float' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'double precision', '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'decimal(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'numeric(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'decimal( 4,2)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'numeric( 4,2)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'date' , 'date ''01.02.2003'' + [a]' , '0x123' from rdb$database union all
select 'smallint', 'time' , 'time ''01:02:03'' + [a]' , '0x124' from rdb$database union all
select 'smallint', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + [a]' , '0x125' from rdb$database union all
select 'smallint', 'blob' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'char(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'nchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'smallint', 'varchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'int', 'smallint' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'bigint' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'float' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'double precision', '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'numeric(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'int', 'decimal(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'int', 'numeric( 4,2)' , '[a]/1000.00' , '45' from rdb$database union all -- SMALLINT (data * 10^2)
select 'int', 'decimal( 4,2)' , '[a]/1000.00' , '45' from rdb$database union all -- INTEGER (data * 10^2)
select 'int', 'numeric( 4,2)' , '[a]/1000.00' , '55' from rdb$database union all -- SMALLINT (data * 10^2)
select 'int', 'decimal( 4,2)' , '[a]/1000.00' , '55' from rdb$database union all -- INTEGER (data * 10^2)
select 'int', 'date' , 'date ''01.02.2003'' + 1608.90*[a]/100' , '5' from rdb$database union all
select 'int', 'time' , 'time ''01:02:03'' + [a]/1000' , '45' from rdb$database union all
select 'int', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + 1608.90*[a]/100' , '5' from rdb$database union all
select 'int', 'blob' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'char(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'nchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'int', 'varchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'bigint', 'smallint' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'bigint' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'float' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'double precision', '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'numeric(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'bigint', 'decimal(10,4)' , '1608.90*[a]/100.00' , '5' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'bigint', 'numeric( 4,2)' , '[a]/1000.00' , '45' from rdb$database union all -- SMALLINT (data * 10^2)
select 'bigint', 'decimal( 4,2)' , '[a]/1000.00' , '45' from rdb$database union all -- INTEGER (data * 10^2)
select 'bigint', 'numeric( 4,2)' , '[a]/1000.00' , '55' from rdb$database union all -- SMALLINT (data * 10^2)
select 'bigint', 'decimal( 4,2)' , '[a]/1000.00' , '55' from rdb$database union all -- INTEGER (data * 10^2)
select 'bigint', 'date' , 'date ''01.02.2003'' + 1608.90*[a]/100' , '5' from rdb$database union all
select 'bigint', 'time' , 'time ''01:02:03'' + [a]/1000' , '45' from rdb$database union all
select 'bigint', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + 1608.90*[a]/100' , '5' from rdb$database union all
select 'bigint', 'blob' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'char(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'nchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database union all
select 'bigint', 'varchar(10)' , '1608.90*[a]/100.00' , '5' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'float', 'int' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'bigint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'smallint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'numeric(10,4)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'float', 'numeric( 4,2)' , '[a]' , '0.045' from rdb$database union all -- SMALLINT (data * 10^2)
select 'float', 'decimal(10,4)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'float', 'decimal(4,2)' , '[a]' , '0.045' from rdb$database union all -- INTEGER (data * 10^2)
select 'float', 'date' , 'date ''01.02.2003'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'time' , 'time ''01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'blob' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'char(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'nchar(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'float', 'varchar(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'double precision', 'int' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'bigint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'smallint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'numeric(10,4)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'double precision', 'decimal(10,4)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'double precision', 'numeric(4,2)' , '[a]' , '0.045' from rdb$database union all -- SMALLINT (data * 10^2)
select 'double precision', 'decimal(4,2)' , '[a]' , '0.045' from rdb$database union all -- INTEGER (data * 10^2)
select 'double precision', 'numeric(4,2)' , '[a]' , '0.055' from rdb$database union all -- SMALLINT (data * 10^2)
select 'double precision', 'decimal(4,2)' , '[a]' , '0.055' from rdb$database union all -- INTEGER (data * 10^2)
select 'double precision', 'numeric(4,2)' , '[a]' , '0.075' from rdb$database union all -- SMALLINT (data * 10^2)
select 'double precision', 'decimal(4,2)' , '[a]' , '0.075' from rdb$database union all -- INTEGER (data * 10^2)
select 'double precision', 'date' , 'date ''01.02.2003'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'time' , 'time ''01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'blob' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'char(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'nchar(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'double precision', 'varchar(10)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'numeric(4,2)', 'smallint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'int' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'bigint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'numeric(4,2)', 'float' , '[a]' , '0.045' from rdb$database union all
select 'numeric(4,2)', 'double precision', '[a]' , '0.045' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'numeric(4,2)', 'float' , '[a]' , '0.055' from rdb$database union all
select 'numeric(4,2)', 'double precision', '[a]' , '0.055' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'numeric(4,2)', 'float' , '[a]' , '0.075' from rdb$database union all
select 'numeric(4,2)', 'double precision', '[a]' , '0.075' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'numeric(4,2)', 'numeric(4,2)' , '[a]' , '0.045' from rdb$database union all -- SMALLINT (data * 10^2)
select 'numeric(4,2)', 'decimal(4,2)' , '[a]' , '0.045' from rdb$database union all -- INTEGER (data * 10^2)
select 'numeric(4,2)', 'numeric(4,2)' , '[a]' , '0.055' from rdb$database union all -- SMALLINT (data * 10^2)
select 'numeric(4,2)', 'decimal(4,2)' , '[a]' , '0.055' from rdb$database union all -- INTEGER (data * 10^2)
select 'numeric(4,2)', 'numeric(4,2)' , '[a]' , '0.075' from rdb$database union all -- SMALLINT (data * 10^2)
select 'numeric(4,2)', 'decimal(4,2)' , '[a]' , '0.075' from rdb$database union all -- INTEGER (data * 10^2)
select 'numeric(4,2)', 'date' , 'date ''01.02.2003'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'time' , 'time ''01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'numeric(4,2)', 'blob' , '[a]' , '0.045' from rdb$database union all
select 'numeric(4,2)', 'char(10)' , '[a]' , '0.045' from rdb$database union all
select 'numeric(4,2)', 'nchar(10)' , '[a]' , '0.045' from rdb$database union all
select 'numeric(4,2)', 'varchar(10)' , '[a]' , '0.045' from rdb$database union all
select 'numeric(4,2)', 'blob' , '[a]' , '0.055' from rdb$database union all
select 'numeric(4,2)', 'char(10)' , '[a]' , '0.055' from rdb$database union all
select 'numeric(4,2)', 'nchar(10)' , '[a]' , '0.055' from rdb$database union all
select 'numeric(4,2)', 'varchar(10)' , '[a]' , '0.055' from rdb$database union all
select 'numeric(4,2)', 'blob' , '[a]' , '0.075' from rdb$database union all
select 'numeric(4,2)', 'char(10)' , '[a]' , '0.075' from rdb$database union all
select 'numeric(4,2)', 'nchar(10)' , '[a]' , '0.075' from rdb$database union all
select 'numeric(4,2)', 'varchar(10)' , '[a]' , '0.075' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'decimal(4,2)', 'smallint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'int' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'bigint' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'decimal(4,2)', 'float' , '[a]' , '0.045' from rdb$database union all
select 'decimal(4,2)', 'double precision', '[a]' , '0.045' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'decimal(4,2)', 'float' , '[a]' , '0.055' from rdb$database union all
select 'decimal(4,2)', 'double precision', '[a]' , '0.055' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'decimal(4,2)', 'float' , '[a]' , '0.075' from rdb$database union all
select 'decimal(4,2)', 'double precision', '[a]' , '0.075' from rdb$database union all -- BIGINT in dia-3 (data * 10^4)
select 'decimal(4,2)', 'numeric(4,2)' , '[a]' , '0.045' from rdb$database union all -- SMALLINT (data * 10^2)
select 'decimal(4,2)', 'decimal(4,2)' , '[a]' , '0.045' from rdb$database union all -- INTEGER (data * 10^2)
select 'decimal(4,2)', 'numeric(4,2)' , '[a]' , '0.055' from rdb$database union all -- SMALLINT (data * 10^2)
select 'decimal(4,2)', 'decimal(4,2)' , '[a]' , '0.055' from rdb$database union all -- INTEGER (data * 10^2)
select 'decimal(4,2)', 'numeric(4,2)' , '[a]' , '0.075' from rdb$database union all -- SMALLINT (data * 10^2)
select 'decimal(4,2)', 'decimal(4,2)' , '[a]' , '0.075' from rdb$database union all -- INTEGER (data * 10^2)
select 'decimal(4,2)', 'date' , 'date ''01.02.2003'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'time' , 'time ''01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + [a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'decimal(4,2)', 'blob' , '[a]' , '0.045' from rdb$database union all
select 'decimal(4,2)', 'char(10)' , '[a]' , '0.045' from rdb$database union all
select 'decimal(4,2)', 'nchar(10)' , '[a]' , '0.045' from rdb$database union all
select 'decimal(4,2)', 'varchar(10)' , '[a]' , '0.045' from rdb$database union all
select 'decimal(4,2)', 'blob' , '[a]' , '0.055' from rdb$database union all
select 'decimal(4,2)', 'char(10)' , '[a]' , '0.055' from rdb$database union all
select 'decimal(4,2)', 'nchar(10)' , '[a]' , '0.055' from rdb$database union all
select 'decimal(4,2)', 'varchar(10)' , '[a]' , '0.055' from rdb$database union all
select 'decimal(4,2)', 'blob' , '[a]' , '0.075' from rdb$database union all
select 'decimal(4,2)', 'char(10)' , '[a]' , '0.075' from rdb$database union all
select 'decimal(4,2)', 'nchar(10)' , '[a]' , '0.075' from rdb$database union all
select 'decimal(4,2)', 'varchar(10)' , '[a]' , '0.075' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'date', 'smallint' , '[a]-date ''29.02.2000''' , '''29.02.2004''' from rdb$database union all
select 'date', 'int' , '[a]-date ''29.02.1600''' , '''29.02.2004''' from rdb$database union all
select 'date', 'bigint' , '[a]-date ''29.02.1600''' , '''29.02.2004''' from rdb$database union all
select 'date', 'float' , 'cast( ''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date) ) - [a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'double precision', 'cast( ''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date) ) - [a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'numeric(4,2)' , 'cast( ''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date) ) - [a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'decimal(4,2)' , 'cast( ''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date) ) - [a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'time' , 'time ''01:02:03'' + (cast(''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date)) - [a])' , '''29.02.2004''' from rdb$database union all
select 'date', 'timestamp' , 'timestamp ''01.02.2003 01:02:03'' + ( cast(''TOMORROW'' as date) + ([a] - cast(''YESTERDAY'' as date)) - [a])' , '''29.02.2004''' from rdb$database union all
select 'date', 'blob' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'char(10)' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'nchar(10)' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'date', 'varchar(10)' , '[a]' , '''29.02.2004''' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'time', 'smallint' , '[a]-time ''10:11:13.123''' , '''11:12:13.789''' from rdb$database union all
select 'time', 'int' , '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'bigint' , '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'float' , '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'double precision', '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'numeric(10,2)' , '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'decimal(10,2)' , '[a]-time ''01:02:03.123''' , '''23:59:59.789''' from rdb$database union all
select 'time', 'date' , 'current_date + [a] - datediff(day from date ''01.02.2003'' to current_date);' , '''01:02:03''' from rdb$database union all
select 'time', 'timestamp' , 'date ''01.02.2003'' + [a]' , '''01:02:03''' from rdb$database union all
select 'time', 'blob' , '[a]' , '''01:02:03''' from rdb$database union all
select 'time', 'char(13)' , '[a]' , '''01:02:03''' from rdb$database union all
select 'time', 'nchar(13)' , '[a]' , '''01:02:03''' from rdb$database union all
select 'time', 'varchar(13)' , '[a]' , '''01:02:03''' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'timestamp', 'smallint' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 11:12:13.789''' from rdb$database union all
select 'timestamp', 'int' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'bigint' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'float' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'double precision', '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'numeric(10,2)' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'decimal(10,2)' , '[a]-timestamp ''29.02.2004 10:11:13.123''' , '''29.02.2004 23:59:59.789''' from rdb$database union all
select 'timestamp', 'date' , '[a]' , '''29.02.2004 01:02:03''' from rdb$database union all
select 'timestamp', 'time' , '[a]' , '''29.02.2004 01:02:03''' from rdb$database union all
select 'timestamp', 'blob' , '[a]' , '''29.02.2004 01:02:03.456''' from rdb$database union all
select 'timestamp', 'char(30)' , '[a]' , '''29.02.2004 01:02:03.456''' from rdb$database union all
select 'timestamp', 'nchar(30)' , '[a]' , '''29.02.2004 01:02:03.456''' from rdb$database union all
select 'timestamp', 'varchar(30)' , '[a]' , '''29.02.2004 01:02:03.456''' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'blob', 'boolean' , '[a]' , 'q''{true}''' from rdb$database union all
select 'blob', 'smallint' , '[a]' , '''0x7fff''' from rdb$database union all
select 'blob', 'int' , '[a]' , '''0x80000000''' from rdb$database union all
select 'blob', 'bigint' , '[a]' , '''0x7fffffffffffffff''' from rdb$database union all
select 'blob', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'blob', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'blob', 'numeric(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'blob', 'decimal(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'blob', 'date' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'blob', 'time' , '[a]' , '''01:02:03.456''' from rdb$database union all
select 'blob', 'char(30)' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'blob', 'nchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'blob', 'varchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'char(30)', 'boolean' , '[a]' , 'q''{true}''' from rdb$database union all
select 'char(30)', 'smallint' , '[a]' , '0x7fff' from rdb$database union all
select 'char(30)', 'int' , '[a]' , '0x80000000' from rdb$database union all
select 'char(30)', 'bigint' , '[a]' , '0x7fffffffffffffff' from rdb$database union all
select 'char(30)', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'char(30)', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'char(30)', 'numeric(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'char(30)', 'decimal(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'char(30)', 'date' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'char(30)', 'time' , '[a]' , '''01:02:03.456''' from rdb$database union all
select 'char(30)', 'blob' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'char(30)', 'nchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'char(30)', 'varchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database
;
--*/
--/*
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'nchar(30)', 'boolean' , '[a]' , 'q''{true}''' from rdb$database union all
select 'nchar(30)', 'smallint' , '[a]' , '0x7fff' from rdb$database union all
select 'nchar(30)', 'int' , '[a]' , '0x80000000' from rdb$database union all
select 'nchar(30)', 'bigint' , '[a]' , '0x7fffffffffffffff' from rdb$database union all
select 'nchar(30)', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'nchar(30)', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'nchar(30)', 'numeric(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'nchar(30)', 'decimal(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'nchar(30)', 'date' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'nchar(30)', 'time' , '[a]' , '''01:02:03.456''' from rdb$database union all
select 'nchar(30)', 'blob' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'nchar(30)', 'char(30)' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'nchar(30)', 'varchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database
;
--*/
insert into tdata(inp_type, out_type, sp_body, inp_arg)
select 'varchar(30)', 'boolean' , '[a]' , 'q''{true}''' from rdb$database union all
select 'varchar(30)', 'smallint' , '[a]' , '0x7fff' from rdb$database union all
select 'varchar(30)', 'int' , '[a]' , '0x80000000' from rdb$database union all
select 'varchar(30)', 'bigint' , '[a]' , '0xf0000000' from rdb$database union all
select 'varchar(30)', 'bigint' , '[a]' , '0x0f0000000' from rdb$database union all
select 'varchar(30)', 'bigint' , '[a]' , '0x7fffffffffffffff' from rdb$database union all
select 'varchar(30)', 'bigint' , '[a]' , '0xffffffffffffffff' from rdb$database union all
select 'varchar(30)', 'float' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'varchar(30)', 'double precision', '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'varchar(30)', 'numeric(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'varchar(30)', 'decimal(5,2)' , '[a]' , '1608.90 * 5.00 / 100.00' from rdb$database union all
select 'varchar(30)', 'date' , '[a]' , '''29.02.2004''' from rdb$database union all
select 'varchar(30)', 'time' , '[a]' , '''01:02:03.456''' from rdb$database union all
select 'varchar(30)', 'blob' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'varchar(30)', 'char(30)' , '[a]' , '0x123456789abcedf' from rdb$database union all
select 'varchar(30)', 'nchar(30)' , '[a]' , '0x123456789abcedf' from rdb$database
;
--##############################################################################
update tdata d set d.out_name = 'blob_id' where d.out_name is distinct from 'blob_id' and d.out_type='blob';
update tdata d set sp_body = out_name || ' = ' || replace(sp_body, '[a]', inp_name);
commit;
set term ^;
create or alter procedure sp_gen_code returns(txt varchar(4000)) as
declare v_lf char(1);
declare v_spnm varchar(100);
declare v_spbk varchar(31);
begin
v_lf = ascii_char(10);
txt = 'set heading off; set blob all;';
suspend;
for
select inp_type, inp_name, out_type, out_name, sp_body, inp_arg, row_number()over(partition by inp_type, out_type, sp_body order by id) rn
from tdata d
as cursor c
do begin
v_spnm = '"' || right( trim(c.inp_type) || '_' || trim(c.out_type), 29) || '"';
if (c.rn=1) then
begin
txt = ''
|| v_lf || 'set term ^;'
|| v_lf || 'create or alter procedure ' || v_spnm || ' ( '|| trim(c.inp_name) || ' ' || trim(c.inp_type) || ' )'
|| v_lf || 'returns ( ' || trim(c.out_name) || ' ' || trim(c.out_type) || ' ) as'
|| v_lf || 'begin'
|| v_lf || ' ' || trim(c.sp_body) || iif( right( trim(c.sp_body) ,1) = ';', '', ';' )
|| v_lf || ' suspend;'
|| v_lf || 'end^'
|| v_lf || 'set term ;^'
|| v_lf || 'commit;'
;
suspend;
end
if ( c.out_name = 'blob_id' ) then
txt = 'set list on; select p.'|| trim(c.out_name) || ' from ' || v_spnm || '(' || trim(c.inp_arg) ||') p; set list off; -- ' || c.rn ;
else
txt = 'set list on; select p.'|| trim(c.out_name) || ' as ' || v_spnm || ' from ' || v_spnm || '(' || trim(c.inp_arg) ||') p; set list off; -- ' || c.rn ;
suspend;
v_spbk = v_spnm;
end
if ( v_spbk is not null ) then
begin
txt = 'commit;'
|| v_lf || ''
;
suspend;
end
end
^
set term ;^
commit;
-- set heading off;
set bail off;
set list on;
select txt as " " from sp_gen_code;
commit;