0

テーブル名を別のカーソルから派生した変数に置き換えたいのですが、どのロジックを使用しようとしても、正しく取得できませんでした。Oracle と SQL Server の例をいくつか見ていますが、失敗しましたそのコードを DB2 SQL に解釈します。助けてください。

Declare
    v_user VarCHAR(100);
    v_schema VARCHAR(1000);
    V_Studio_svr VARCHAR(1000);
    v_db2_schema VARCHAR(1000);
    v_oracle_string varchar(5000) ;
    v_db2_string varchar(5000) := '(' ;
    v_sys_columns varchar(2000);
    v_sys_values  varchar(2000);
    V_UID iNTEGER := 41;



begin
-- Main Table to Get Table Name From 
    FOR v In ( Select app_id,Upper(alias) ALIAS 
               From FREEDOM.FORMS where app_id = '5e988af8-ef0f-48c7-9794-9bc4f1134c80' ) Loop
      v_schema := 'S__'||V.app_ID||'_1';
      v_schema := replace(v_schema,'-','_');
      v_studio_svr := 'PTU'||SUBSTR(v.alias,2,LENGTH(v.alias));
      v_db2_schema := 'TF'||SUBSTR(v.alias,2,LENGTH(v.alias));
    -- This is where I want to use Table Name as Variable Coming From Cursor V
      For P in 
        (Select * from studio_svr||'.'||v_studio_svr) loop  
     -- Table to get Data Type Mappings 
         For i in 
            (Select * From fREEDOM.DB2_DT_MAPPING
             Where Table_Name = v.alias )  Loop

                   IF I.DB2_DATATYPE LIKE 'DECIMAL%' THEN
                    v_ORACLE_STRING := Nvl(v_ORACLE_STRING,'')||'CAST('||'INTEGER('||I.STUDIO_SVR_COLUMN||') AS DECIMAL(22,6)),';
               ELSE
                 v_ORACLE_STRING := Nvl(v_ORACLE_STRING,'')||I.STUDIO_SVR_COLUMN||',';
               END IF;
                     v_DB2_STRING := v_DB2_STRING||I.DB2_COLUMN||',';

         End Loop;  

         v_DB2_STRING := SUBSTR(v_DB2_STRING,1,LENGTH(v_DB2_STRING)-1)||')';

  execute immediate 'Insert Into ' || v_schema || '.' || v_db2_schema || '  '|| v_db2_string ||' SELECT '|| v_oracle_string ||' FROM Studio_svr.' || v_studio_svr || 'where S__recordid ='||p.s__recordid ;

   v_db2_string := '(';
   v_oracle_string := '';
   v_uid := v_uid + 1;
   commit;
   End loop;
  END lOOP;

終わり

4

1 に答える 1