MINI MINI MANI MO
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