PROCEDURE "USER1"."create_hdbview" (
p_schema_name nvarchar(256),
p_table_name nvarchar(256),
p_prefix nvarchar(256),
p_target_schema_name nvarchar(256),
p_target_prefix nvarchar(256),
out p_text_create_view nclob,
out p_text_hdbview_xs nclob,
out p_text_hdbview_xsa nclob,
out p_text_hdbdd nclob
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
declare v_line nvarchar(500) array;
declare v_data_type nvarchar(30);
declare v_count integer;
declare v_table_name nvarchar(256);
declare v_view_select nclob;
declare cursor c1 for
select
c.column_name,
c.data_type_name,
c.length,
c.scale,
c.is_nullable,
c.comments,
p.is_primary_key
from table_columns c
left outer join constraints p
on (p.is_primary_key = 'TRUE' and
p.schema_name = c.schema_name and
p.table_name = c.table_name and
p.column_name = c.column_name)
where c.schema_name = :p_schema_name and
c.table_name = :p_table_name
order by p.position nulls last, c.position;
declare v_crlf NVARCHAR(2);
v_crlf = BINTOSTR( HEXTOBIN('0D0A') );
v_table_name = substring(p_table_name, length(p_prefix)+1);
for r_row as c1 do
v_line[CARDINALITY(:v_line)+1] = ' "' || r_row.column_name || '"';
end for;
v_view_select = 'select ' || v_crlf;
for v_count in 1..CARDINALITY(:v_line) do
if v_count > 1 then
v_view_select = v_view_select || ',' || v_crlf;
end if;
v_view_select = v_view_select || :v_line[:v_count];
end for;
v_view_select = v_view_select || v_crlf;
v_view_select = v_view_select || 'from "' ||
p_schema_name || '"."' || p_table_name || '"';
p_text_create_view = 'create view "' ||
p_target_schema_name || '"."' || p_target_prefix ||
v_table_name || '" as ' || v_crlf ||
v_view_select || ';' || v_crlf || v_crlf;
p_text_hdbview_xsa = 'view "' || p_target_prefix || v_table_name ||
'" as ' || v_crlf || v_view_select || v_crlf;
p_text_hdbview_xs = 'schema="' || p_target_schema_name ||
'";' || v_crlf;
p_text_hdbview_xs = p_text_hdbview_xs || 'public=false;' || v_crlf;
p_text_hdbview_xs = p_text_hdbview_xs || 'query="' ||
replace(v_view_select, '"', '\"') ||
'";' || v_crlf;
p_text_hdbdd = ' View ' || p_target_prefix ||
v_table_name || ' as ' || v_crlf;
p_text_hdbdd = p_text_hdbdd || ' select from "' ||
p_table_name || '" {' || v_crlf;
for v_count in 1..CARDINALITY(:v_line) do
if v_count > 1 then
p_text_hdbdd = p_text_hdbdd || ',' || v_crlf;
end if;
p_text_hdbdd = p_text_hdbdd || ' ' || :v_line[:v_count];
end for;
p_text_hdbdd = p_text_hdbdd || v_crlf;
p_text_hdbdd = p_text_hdbdd || ' };' || v_crlf;
ENDYou must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 27 | |
| 24 | |
| 20 | |
| 19 | |
| 14 | |
| 13 | |
| 13 | |
| 12 | |
| 12 | |
| 11 |