Quantcast
Channel: SCN: Message List - SAP HANA Developer Center
Viewing all articles
Browse latest Browse all 9165

Re: How to insert the result from a procedure into a table or table variable ?

$
0
0

Hi Yujun,

 

 

I just played around on creating the below procedure which returns the 'Create Table' script. I haven't considered the constraints/indexes part on this. Also there might be missing in data type considerations.Can you please have a look on this.. Not sure whether this is helpful or not.

 

DROP PROCEDURE GET_TABLE_DEFINITION_SP;

 

 

CREATE PROCEDURE GET_TABLE_DEFINITION_SP(IN _schema_name NVARCHAR(256), IN _table_name NVARCHAR(256), OUT _tab_def NCLOB,OUT _comment_def NCLOB)

LANGUAGE SQLSCRIPT

SQL SECURITY INVOKER

-- DEFAULT SCHEMA

AS

BEGIN

  DECLARE is_exist TINYINT;

  DECLARE table_type VARCHAR(10);

  DECLARE init_create VARCHAR(400);

  DECLARE tab_cols NCLOB;

  DECLARE col_comment NCLOB;

 

  DECLARE CURSOR cur_tab_cols FOR

  SELECT t.COLUMN_NAME,t.DATA_TYPE_NAME,t.LENGTH AS COL_LENGTH,t.SCALE AS COL_SCALE,t.IS_NULLABLE,t.DEFAULT_VALUE,t.COMMENTS,t.CS_DATA_TYPE_NAME

  FROM SYS.TABLE_COLUMNS t

  WHERE t.SCHEMA_NAME = _schema_name AND t.TABLE_NAME = _table_name

  ORDER BY POSITION;

  SELECT COUNT(1),MAX(TABLE_TYPE) INTO is_exist,table_type  FROM SYS.TABLES WHERE SCHEMA_NAME = _schema_name AND TABLE_NAME = _table_name;

  IF is_exist = 0 THEN

  _tab_def := ' table not found ';

  RETURN;

  END IF;

  init_create := 'CREATE ' || :table_type || ' TABLE "' || :_schema_name || '"."' || :_table_name || '" (';

 

  FOR cur_tab_cols_rec AS cur_tab_cols DO

 

 

  tab_cols := CASE WHEN cur_tab_cols::ROWCOUNT = 1 THEN TO_CHAR('') ELSE TO_CHAR(tab_cols) || TO_CHAR(',') END ||

             '"'|| cur_tab_cols_rec.COLUMN_NAME || '"' || ' ' || cur_tab_cols_rec.DATA_TYPE_NAME ||

             CASE WHEN cur_tab_cols_rec.DATA_TYPE_NAME = 'NVARCHAR' OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'VARCHAR'  OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'CHAR' OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'SHORTTEXT' OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'ALPHANUM' OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'VARBINARY' OR

                       cur_tab_cols_rec.DATA_TYPE_NAME = 'BINARY'

                  THEN '(' || TO_CHAR(cur_tab_cols_rec."COL_LENGTH") || ')'

                  WHEN cur_tab_cols_rec.DATA_TYPE_NAME = 'DECIMAL'

                     THEN '(' || TO_CHAR(cur_tab_cols_rec."COL_LENGTH") || ',' || TO_CHAR(cur_tab_cols_rec.COL_SCALE) ||  ')'

                  ELSE ''

             END ||

             CASE WHEN cur_tab_cols_rec.IS_NULLABLE = 'FALSE' THEN ' NOT NULL ' ELSE '' END ||

             CASE WHEN cur_tab_cols_rec.DEFAULT_VALUE IS NOT NULL THEN ' DEFAULT ' ||

                        CASE WHEN cur_tab_cols_rec.DATA_TYPE_NAME = 'NVARCHAR' OR

                                  cur_tab_cols_rec.DATA_TYPE_NAME = 'VARCHAR'  OR

                                  cur_tab_cols_rec.DATA_TYPE_NAME = 'CHAR' OR

                                  cur_tab_cols_rec.DATA_TYPE_NAME = 'SHORTTEXT' OR

                                  cur_tab_cols_rec.DATA_TYPE_NAME = 'ALPHANUM' THEN '''' || cur_tab_cols_rec.DEFAULT_VALUE || ''''

                             ELSE cur_tab_cols_rec.DEFAULT_VALUE END

                  ELSE ''

             END;

 

  col_comment :=  IFNULL(TO_CHAR(col_comment),TO_CHAR(''))   ||

                 CASE WHEN cur_tab_cols_rec.COMMENTS IS NULL THEN ''

                      ELSE

                           'COMMENT ON COLUMN ' || '"' || :_schema_name || '".' || '"' || :_table_name || '"."' || cur_tab_cols_rec.COLUMN_NAME || '" IS ' ||

                                    '''' || cur_tab_cols_rec.COMMENTS || '''' || ';'

                      END  ;

                   

 

 

  END FOR;

 

 

  _tab_def :=  init_create || ' ' ||  tab_cols || ' );' ;

  _comment_def := col_comment;

END;

 

 

 

 

 

 

CALL GET_TABLE_DEFINITION_SP('schema_name','table_name',?,?)  ;

 

 

 

 

Regards,

Nithin


Viewing all articles
Browse latest Browse all 9165

Trending Articles