MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/drdaas/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/drdaas/admin/drdasqtt_translator_setup.sql

SET ECHO OFF
Rem
Rem $Header: rdbms/src/client/dps/protocol/drda/admin/drdasqtt_translator_setup.sql /main/4 2017/06/22 02:11:48 stanaya Exp $
Rem
Rem drdasqtt_translator_setup.sql
Rem
Rem Copyright (c) 2012, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      drdasqtt_translator_setup.sql - Generalized script for setting up an
Rem                                      external SQL translator
Rem
Rem
Rem    DESCRIPTION
Rem      This script can be used to set up any external SQL translator.
Rem      Some translators, e.g., BableFish, may need extra customizations.
Rem      For BabelFish, that would include the source/target SQL text for
Rem      the fingerprint translations (to be inserted into
Rem      DBA_SQL_TRANSLATIONS).
Rem
Rem    NOTES
Rem      Should be run "/ as sysdba"
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: rdbms/src/client/dps/protocol/drda/admin/drdasqtt_translator_setup.sql
Rem    SQL_SHIPPED_FILE: drdaas/admin/drdasqtt_translator_setup.sql
Rem    SQL_PHASE: UTILITY
Rem    SQL_STARTUP_MODE: NONE
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    END SQL_FILE_METADATA
Rem
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    pcastro     01/22/13 - changed Object path entry prompts.
Rem    cbenet      10/22/12 - lrg7333214: attr_translation_registration has 
Rem                           been deleted -- use attr_translate_new_sql
Rem    cbenet      06/01/12 - in case the translateSQL/translateError function
Rem                           signatures need to be quoted
Rem    cbenet      05/16/12 - Created
Rem
Rem

SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100
SET SERVEROUTPUT ON

show user

Prompt Enter schema in which the SQL Translator Interface Package will be
Prompt created as well as into which the third-party SQL translator will be
Prompt loaded (usually SYSIBM).
Accept TRANS_PKG_SCHEMA_ Prompt 'SQL Translator Interface Package Schema: '
DEFINE TRANSLATOR_PACKAGE_SCHEMA =  &TRANS_PKG_SCHEMA_

Prompt Enter unqualified name of the SQL Translator Interface Package.
Accept TRANS_PKG_NAME_ Prompt 'SQL Translator Interface Package Name: '
DEFINE TRANSLATOR_PACKAGE_NAME = &TRANS_PKG_NAME_

Prompt Enter schema in which the Translation Profile will be created.
Accept TRANS_PROFILE_SCHEMA_ Prompt 'Translation Profile Schema: '
DEFINE TRANS_PROFILE_SCHEMA = &TRANS_PROFILE_SCHEMA_

Prompt Enter the unqualified name of the translation profile.
Accept TRANS_PROFILE_NAME_ Prompt 'Translation Profile Name: '
DEFINE TRANS_PROFILE_NAME =  &TRANS_PROFILE_NAME_

Prompt Enter the "language" type of the translator (C, java, etc).
Accept TRANS_LANG_ Prompt 'Translator Language: '
DEFINE TRANS_LANG = &TRANS_LANG_

Prompt Enter the path names of the third-party SQL Translator objects;
Prompt (All objects must be located under the "rdbms/" directory,
Prompt  for example: "rdbms/drdaas/jlib/objecta.jar").
Prompt Enter all path qualified objects, one per prompt, up to 10.
Prompt Enter "" for all remaining object prompts.
DEFINE EXTERNAL_CODE1 = ""
Accept EXTERNAL_CODE1_ Prompt 'SQL Translator object#1: '
DEFINE EXTERNAL_CODE1 = &EXTERNAL_CODE1_
DEFINE EXTERNAL_CODE2 = ""
Accept EXTERNAL_CODE2_ Prompt 'SQL Translator object#2: '
DEFINE EXTERNAL_CODE2 = &EXTERNAL_CODE2_
DEFINE EXTERNAL_CODE3 = ""
Accept EXTERNAL_CODE3_ Prompt 'SQL Translator object#3: '
DEFINE EXTERNAL_CODE3 = &EXTERNAL_CODE3_
DEFINE EXTERNAL_CODE4 = ""
Accept EXTERNAL_CODE4_ Prompt 'SQL Translator object#4: '
DEFINE EXTERNAL_CODE4 = &EXTERNAL_CODE4_
DEFINE EXTERNAL_CODE5 = ""
Accept EXTERNAL_CODE5_ Prompt 'SQL Translator object#5: '
DEFINE EXTERNAL_CODE5 = &EXTERNAL_CODE5_
DEFINE EXTERNAL_CODE6 = ""
Accept EXTERNAL_CODE6_ Prompt 'SQL Translator object#6: '
DEFINE EXTERNAL_CODE6 = &EXTERNAL_CODE6_
DEFINE EXTERNAL_CODE7 = ""
Accept EXTERNAL_CODE7_ Prompt 'SQL Translator object#7: '
DEFINE EXTERNAL_CODE7 = &EXTERNAL_CODE7_
DEFINE EXTERNAL_CODE8 = ""
Accept EXTERNAL_CODE8_ Prompt 'SQL Translator object#8: '
DEFINE EXTERNAL_CODE8 = &EXTERNAL_CODE8_
DEFINE EXTERNAL_CODE9 = ""
Accept EXTERNAL_CODE9_ Prompt 'SQL Translator object#9: '
DEFINE EXTERNAL_CODE9 = &EXTERNAL_CODE9_
DEFINE EXTERNAL_CODE10 = ""
Accept EXTERNAL_CODE10_ Prompt 'SQL Translator object#10: '
DEFINE EXTERNAL_CODE10 = &EXTERNAL_CODE10_


Prompt Enter the signature for the entry for 'translateSQL' in one of the
Prompt previously entered SQL Translator objects.
Accept CALLOUT_TRANSLATE_SQL_ Prompt 'Entry for translateSQL: '
DEFINE CALLOUT_TRANSLATE_SQL = '''&CALLOUT_TRANSLATE_SQL_'''

Prompt Enter the signature for the entry for 'translateError' in one of the
Prompt previously entered SQL Translator objects.
Accept CALLOUT_TRANSLATE_ERROR_ Prompt 'Callout for translateError: '
DEFINE CALLOUT_TRANSLATE_ERROR = '''&CALLOUT_TRANSLATE_ERROR_'''


Rem Create the SQL Translator Interface Package ...

create or replace package &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME as

  procedure translate_sql(sql_text              in  clob,
                          translated_text       out clob);

  procedure translate_error(error_code          in  binary_integer,
                            translated_code     out binary_integer,
                            translated_sqlstate out varchar2);

end;
/
show errors

declare 
  COMP_ERROR exception;
  pragma EXCEPTION_INIT(COMP_ERROR, -24344);
  translateSQLcode CONSTANT VARCHAR2(1024) := &&CALLOUT_TRANSLATE_SQL;
  translateErrorcode CONSTANT VARCHAR2(1024) := &&CALLOUT_TRANSLATE_ERROR;
  translateSQLToUse VARCHAR2(1024);
  translateErrorToUse VARCHAR2(1024);
  ln NUMBER;
  quote CONSTANT CHAR := '''';
  my_cursor BINARY_INTEGER;
  n BINARY_INTEGER;
  i BINARY_INTEGER;
  package_body   VARCHAR2(1024);
  /* we can't use bind variables to substitute for the "name" part of the */
  /* procedures in the package body declaration; the "name" part MUST be a*/
  /* single-quoted string!!! ARGHHH !!!                                   */
  package_body_1 VARCHAR2(400) := 
       'create or replace package ' ||
          'body &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME as '  ||
            'procedure translate_sql(sql_text              in  clob, '       ||
                                  '  translated_text       out clob) as '    ||
              'language &&TRANS_LANG '                                       ||
              'name ''';
  package_body_2 VARCHAR2(400) := ''' ;'                                    ||
            'procedure translate_error(error_code  in  binary_integer, '     ||
                                     ' translated_code out binary_integer,'  ||
                                    ' translated_sqlstate out varchar2) as ' ||
              'language &&TRANS_LANG '                                       ||
              'name ''';
  package_body_end VARCHAR2(10) := '''; end;';
begin
  ln := LENGTH(translateSQLcode);
  IF SUBSTR(translateSQLCode,1,1) = quote AND
     SUBSTR(translateSQLCode,ln,1) = quote THEN
    translateSQLToUse := SUBSTR(translateSQLCode, 2, ln-2);
  ELSE
    translateSQLToUse := translateSQLCode;
  END IF;
  ln := LENGTH(translateErrorcode);
  IF SUBSTR(translateErrorCode,1,1) = quote AND
     SUBSTR(translateErrorCode,ln,1) = quote THEN
    translateErrorToUse := SUBSTR(translateErrorCode, 2, ln-2);
  ELSE
    translateErrorToUse := translateErrorCode;
  END IF;
  my_cursor := DBMS_SQL.OPEN_CURSOR;
  package_body := package_body_1 || translateSQLToUse || package_body_2 ||
                  translateErrorToUse || package_body_end;
  BEGIN
    DBMS_SQL.PARSE(my_cursor, package_body, DBMS_SQL.NATIVE);
  EXCEPTION
    when COMP_ERROR THEN DBMS_OUTPUT.PUT_LINE('SQLCODE=' || SQLCODE || ':' ||
                                              SQLERRM);
  END;
  n := DBMS_SQL.EXECUTE(my_cursor);
  DBMS_SQL.CLOSE_CURSOR(my_cursor);
end;
/

show errors

Rem Load the Java code
Rem CALL DBMS_JAVA.LOADJAVA('-definer -genmissing -schema SYSIBM rdbms/drdaas/jlib/DBTooSQLAPI.jar rdbms/drdaas/jlib/DBTooSQLTranslator.class', '((* SYSIBM)(* PUBLIC)(* -))');
Rem DBTooSQLAPI.jar and DBTooSQLTranslator.class are fictional names
set serveroutput on

show user 

Rem Load the .class and .jar objects as specified ...

declare 
  extcode VARCHAR2(4096) := '''&&EXTERNAL_CODE1 &&EXTERNAL_CODE2 &&EXTERNAL_CODE3 &&EXTERNAL_CODE4 &&EXTERNAL_CODE5 &&EXTERNAL_CODE6 &&EXTERNAL_CODE7 &&EXTERNAL_CODE8 &&EXTERNAL_CODE9 &&EXTERNAL_CODE10''';
  real_extcode VARCHAR2(4096);
  first_parm_first_part VARCHAR2(128) := 
                 '-definer -genmissing -schema &&TRANSLATOR_PACKAGE_SCHEMA ';
  first_parm VARCHAR2(4096);
  ln NUMBER;
begin
  ln := LENGTH(extcode);
  /* We might have a beginning and ending aprostrophe --*/
  /* we need to delete them                             */
  IF SUBSTR(extcode,1,1) = '''' AND SUBSTR(extcode,ln,1) = '''' THEN
     real_extcode := SUBSTR(extcode, 2, ln-2);
  ELSE
     real_extcode := extcode;
  END IF;
  first_parm := first_parm_first_part || ' ' || real_extcode;
/*DBMS_OUTPUT.PUT_LINE('First parm ' || first_parm); */
  DBMS_JAVA.LOADJAVA(first_parm ,
                     '((* &&TRANSLATOR_PACKAGE_SCHEMA)(* PUBLIC)(* -))');   
end;
/

GRANT EXECUTE ON &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME  to PUBLIC;

GRANT CREATE SQL TRANSLATION PROFILE TO &&TRANS_PROFILE_SCHEMA;
GRANT TRANSLATE ANY SQL TO &&TRANS_PROFILE_SCHEMA WITH ADMIN OPTION;

CALL DBMS_SQL_TRANSLATOR.DROP_PROFILE('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME');
CALL DBMS_SQL_TRANSLATOR.CREATE_PROFILE('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME');


begin
    dbms_sql_translator.set_attribute('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME',  
                        dbms_sql_translator.attr_translator,
                                    '&&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME');
  
 dbms_sql_translator.set_attribute('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME',  
                        dbms_sql_translator.attr_translate_new_sql,  
                                        dbms_sql_translator.attr_value_true);
end;
/

GRANT ALL ON SQL TRANSLATION PROFILE 
  &&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME TO &&TRANSLATOR_PACKAGE_SCHEMA ;
GRANT USE ON SQL TRANSLATION PROFILE
  &&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME TO DRDAAS_USER_ROLE;




OHA YOOOO