рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЛрдЯрд╕ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдбреЗрдЯрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛ рдХрд╛рд░реНрдЯреНрд░рд┐рдЬ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде

рд╣рдордореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВ рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ SQL рдЪрдпрди рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдЯрд╕ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╢рд╛рдпрдж рдпрд╣ рд╡рд┐рд╖рдп рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпреЗ рджреЛ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдЙрди рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдЬреЛ рд╡реЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг: рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрдб рдЯреЗрдмрд▓ рдлрдВрдХреНрд╢рдВрд╕: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг, ODCITable рддрд░реАрдХреЛрдВ рдХреЗ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдФрд░ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдПрдХреНрд╕реЗрд╕
рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдУрд░реЗрдХрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдПрдбреНрд░реЗрд╕ рдмреБрдХ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореМрд▓рд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рд╣реЛрдо / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдЬрд╛рд╡рд╛ / oracle_domino рдореЗрдВ рд╕реНрдерд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, domino_names_odci_mem.java:
 import lotus.domino.*; import java.util.*; import java.io.*; import oracle.sql.*; import java.sql.*; import java.math.*; import oracle.CartridgeServices.*; import java.util.Calendar; import java.text.SimpleDateFormat; public class domino_StoredCtx { //   ,   domino Vector vnames; } //   SQLData,          public class domino_names_odci_mem implements SQLData { private BigDecimal key; final static BigDecimal SUCCESS = new BigDecimal(0); final static BigDecimal ERROR = new BigDecimal(1); //  SQLData String sql_type; public String getSQLTypeName() throws SQLException { return sql_type; } public void readSQL(SQLInput stream, String typeName) throws SQLException { sql_type = typeName; key = stream.readBigDecimal(); } public void writeSQL(SQLOutput stream) throws SQLException { stream.writeBigDecimal(key); } // ODCI: ODCITableStart,ODCITableFetch,ODCITableClose (  ,   ) static public BigDecimal ODCITableStart(STRUCT[] sctx,String param) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); domino_StoredCtx ctx = new domino_StoredCtx(); StructDescriptor outDesc = StructDescriptor.createDescriptor("DOMINO_NAME", conn); Object[] out_attr = new Object[4]; //     10  int nrowsval = 10; ctx.vnames = new Vector(); try { //     domino       lotus.domino.Session session = NotesFactory.createSession("ip_of_domino_server:DIIOP_port","user","password"); lotus.domino.Database db = session.getDatabase("", "names.nsf"); lotus.domino.View vw = db.getView("People"); lotus.domino.Document doc = vw.getFirstDocument(); while(nrowsval>0 && doc != null){ String shortName = doc.getItemValueString("ShortName"); String altFullName = doc.getItemValueString("AltFullName"); lotus.domino.Name name = session.createName(altFullName); String commonName = name.getCommon(); String employeeID = doc.getItemValueString("EmployeeID"); out_attr[1-1] = (Object)new String(shortName); out_attr[2-1] = (Object)new String(commonName); out_attr[3-1] = (Object)new String(employeeID); out_attr[4-1] = (Object)new String(now()); ctx.vnames.add((Object)new STRUCT(outDesc, conn, out_attr)); nrowsval--; doc = vw.getNextDocument(doc); } } catch(Exception e) { e.printStackTrace(); } int key; try { //        ODCITableFetch key = ContextManager.setContext(ctx); } catch (CountException ce) { return ERROR; } Object[] impAttr = new Object[1]; impAttr[0] = new BigDecimal(key); StructDescriptor sd = new StructDescriptor("DOMINO_NAMES_ODCI_MEM",conn); sctx[0] = new STRUCT(sd,conn,impAttr); return SUCCESS; } public BigDecimal ODCITableFetch(BigDecimal nrows, ARRAY[] outSet) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); domino_StoredCtx ctx; try { //    ctx=(domino_StoredCtx)ContextManager.getContext(key.intValue()); } catch (InvalidKeyException ik ) { return ERROR; } // ODCITableFetch  ,      //..  ,     2 ,    ,    if(ctx.vnames==null) return SUCCESS; //     Object out_arr[] = ctx.vnames.toArray(); ArrayDescriptor ad = new ArrayDescriptor("DOMINO_NAMES_TABLE",conn); outSet[0] = new ARRAY(ad,conn,out_arr); // ,       ctx.vnames=null; return SUCCESS; } public BigDecimal ODCITableClose() throws SQLException { domino_StoredCtx ctx; try { ctx=(domino_StoredCtx)ContextManager.clearContext(key.intValue()); } catch (InvalidKeyException ik ) { return ERROR; } return SUCCESS; } //      public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss"; public static String now() { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); return sdf.format(cal.getTime()); } } 
import lotus.domino.*; import java.util.*; import java.io.*; import oracle.sql.*; import java.sql.*; import java.math.*; import oracle.CartridgeServices.*; import java.util.Calendar; import java.text.SimpleDateFormat; public class domino_StoredCtx { // , domino Vector vnames; } // SQLData, public class domino_names_odci_mem implements SQLData { private BigDecimal key; final static BigDecimal SUCCESS = new BigDecimal(0); final static BigDecimal ERROR = new BigDecimal(1); // SQLData String sql_type; public String getSQLTypeName() throws SQLException { return sql_type; } public void readSQL(SQLInput stream, String typeName) throws SQLException { sql_type = typeName; key = stream.readBigDecimal(); } public void writeSQL(SQLOutput stream) throws SQLException { stream.writeBigDecimal(key); } // ODCI: ODCITableStart,ODCITableFetch,ODCITableClose ( , ) static public BigDecimal ODCITableStart(STRUCT[] sctx,String param) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); domino_StoredCtx ctx = new domino_StoredCtx(); StructDescriptor outDesc = StructDescriptor.createDescriptor("DOMINO_NAME", conn); Object[] out_attr = new Object[4]; // 10 int nrowsval = 10; ctx.vnames = new Vector(); try { // domino lotus.domino.Session session = NotesFactory.createSession("ip_of_domino_server:DIIOP_port","user","password"); lotus.domino.Database db = session.getDatabase("", "names.nsf"); lotus.domino.View vw = db.getView("People"); lotus.domino.Document doc = vw.getFirstDocument(); while(nrowsval>0 && doc != null){ String shortName = doc.getItemValueString("ShortName"); String altFullName = doc.getItemValueString("AltFullName"); lotus.domino.Name name = session.createName(altFullName); String commonName = name.getCommon(); String employeeID = doc.getItemValueString("EmployeeID"); out_attr[1-1] = (Object)new String(shortName); out_attr[2-1] = (Object)new String(commonName); out_attr[3-1] = (Object)new String(employeeID); out_attr[4-1] = (Object)new String(now()); ctx.vnames.add((Object)new STRUCT(outDesc, conn, out_attr)); nrowsval--; doc = vw.getNextDocument(doc); } } catch(Exception e) { e.printStackTrace(); } int key; try { // ODCITableFetch key = ContextManager.setContext(ctx); } catch (CountException ce) { return ERROR; } Object[] impAttr = new Object[1]; impAttr[0] = new BigDecimal(key); StructDescriptor sd = new StructDescriptor("DOMINO_NAMES_ODCI_MEM",conn); sctx[0] = new STRUCT(sd,conn,impAttr); return SUCCESS; } public BigDecimal ODCITableFetch(BigDecimal nrows, ARRAY[] outSet) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); domino_StoredCtx ctx; try { // ctx=(domino_StoredCtx)ContextManager.getContext(key.intValue()); } catch (InvalidKeyException ik ) { return ERROR; } // ODCITableFetch , //.. , 2 , , if(ctx.vnames==null) return SUCCESS; // Object out_arr[] = ctx.vnames.toArray(); ArrayDescriptor ad = new ArrayDescriptor("DOMINO_NAMES_TABLE",conn); outSet[0] = new ARRAY(ad,conn,out_arr); // , ctx.vnames=null; return SUCCESS; } public BigDecimal ODCITableClose() throws SQLException { domino_StoredCtx ctx; try { ctx=(domino_StoredCtx)ContextManager.clearContext(key.intValue()); } catch (InvalidKeyException ik ) { return ERROR; } return SUCCESS; } // public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss"; public static String now() { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); return sdf.format(cal.getTime()); } }


рдЕрдм рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред
рдПрдХ рдорд╛рдирдХ рдбреЛрдорд┐рдиреЛрдЬрд╝ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ NCSO.jar рдХреЛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА / рд▓реЛрдХрд▓ / рдиреЛрдЯреНрд╕рдбреЗрдЯрд╛ / рдбреЛрдорд┐рдиреЛ / рдЬрд╛рд╡рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

 export ORACLE_SID=MYDB #      sqlplus '/as sysdba' <<EOF drop user udomino cascade; / create user udomino identified by "pdomino"; grant connect,resource to udomino; grant create any directory,drop any directory to udomino; exec dbms_java.grant_permission( 'UDOMINO', 'SYS:java.net.SocketPermission', 'ip_of_domino_server:DIIOP_port', 'connect,resolve' ); EOF # Oracle Database      jar,   Domino,         #     , .. Oracle ,      loadjava -user udomino/pdomino -order -resolve -genmissing -verbose -resolver "((* UDOMINO) (* PUBLIC) (* -))" NCSO.jar #         sqlplus -S /nolog <<EOF connect udomino/pdomino drop type domino_names_odci_mem; drop type domino_names_table; drop type domino_name; drop function domino_names; drop java source domino_names_odci_mem_source; drop directory javadir / create type domino_name as object ( shn varchar(20), fio varchar(256), tab_n varchar(20), dt varchar(20) ); / create type domino_names_table as table of domino_name; / create or replace directory javadir as '/home/user/java/oracle_domino'; / create and compile java source named domino_names_odci_mem_source using bfile (javadir,'domino_names_odci_mem.java'); / show errors #   ODCITable create type domino_names_odci_mem as object ( key integer, static function ODCITableStart(sctx in out domino_names_odci_mem,param varchar2) return number as language java name 'domino_names_odci_mem.ODCITableStart(oracle.sql.STRUCT[],java.lang.String) return java.math.BigDecimal', member function ODCITableFetch(self in out domino_names_odci_mem, nrows in number, outSet out domino_names_table) return number as language java name 'domino_names_odci_mem.ODCITableFetch(java.math.BigDecimal, oracle.sql.ARRAY[]) return java.math.BigDecimal', member function ODCITableClose(self IN domino_names_odci_mem) return number as language java name 'domino_names_odci_mem.ODCITableClose() return java.math.BigDecimal' ); / show errors create function domino_names(param varchar2) return domino_names_table pipelined using domino_names_odci_mem; / EOF #      export NLS_LANG=American_America.UTF8 sqlplus -S /nolog<<EOF connect udomino/pdomino set serveroutput on call dbms_java.set_output(1000000); set linesize 160 set pagesize 1000 set feedback off col fio for a50 col tab_n for a10 col shn for a20 col dt for a20 select * from table(domino_names('some_string_param')) order by dt; exit; EOF 
export ORACLE_SID=MYDB # sqlplus '/as sysdba' <<EOF drop user udomino cascade; / create user udomino identified by "pdomino"; grant connect,resource to udomino; grant create any directory,drop any directory to udomino; exec dbms_java.grant_permission( 'UDOMINO', 'SYS:java.net.SocketPermission', 'ip_of_domino_server:DIIOP_port', 'connect,resolve' ); EOF # Oracle Database jar, Domino, # , .. Oracle , loadjava -user udomino/pdomino -order -resolve -genmissing -verbose -resolver "((* UDOMINO) (* PUBLIC) (* -))" NCSO.jar # sqlplus -S /nolog <<EOF connect udomino/pdomino drop type domino_names_odci_mem; drop type domino_names_table; drop type domino_name; drop function domino_names; drop java source domino_names_odci_mem_source; drop directory javadir / create type domino_name as object ( shn varchar(20), fio varchar(256), tab_n varchar(20), dt varchar(20) ); / create type domino_names_table as table of domino_name; / create or replace directory javadir as '/home/user/java/oracle_domino'; / create and compile java source named domino_names_odci_mem_source using bfile (javadir,'domino_names_odci_mem.java'); / show errors # ODCITable create type domino_names_odci_mem as object ( key integer, static function ODCITableStart(sctx in out domino_names_odci_mem,param varchar2) return number as language java name 'domino_names_odci_mem.ODCITableStart(oracle.sql.STRUCT[],java.lang.String) return java.math.BigDecimal', member function ODCITableFetch(self in out domino_names_odci_mem, nrows in number, outSet out domino_names_table) return number as language java name 'domino_names_odci_mem.ODCITableFetch(java.math.BigDecimal, oracle.sql.ARRAY[]) return java.math.BigDecimal', member function ODCITableClose(self IN domino_names_odci_mem) return number as language java name 'domino_names_odci_mem.ODCITableClose() return java.math.BigDecimal' ); / show errors create function domino_names(param varchar2) return domino_names_table pipelined using domino_names_odci_mem; / EOF # export NLS_LANG=American_America.UTF8 sqlplus -S /nolog<<EOF connect udomino/pdomino set serveroutput on call dbms_java.set_output(1000000); set linesize 160 set pagesize 1000 set feedback off col fio for a50 col tab_n for a10 col shn for a20 col dt for a20 select * from table(domino_names('some_string_param')) order by dt; exit; EOF


рдирддреАрдЬрддрди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ (рдЕрдВрдд рдореЗрдВ) рд╣реЛрдЧрд╛:
 SHN FIO TAB_N DT -------------------- ------------------------------ ---------- -------------------- user    12305 2011-08-25 11:55:14 .... 
SHN FIO TAB_N DT -------------------- ------------------------------ ---------- -------------------- user 12305 2011-08-25 11:55:14 ....


рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбреЛрдорд┐рдиреЛрдЬрд╝ рд╕рд░реНрд╡рд░ред рдпрд╛рдиреА рдХреЗрд╡рд▓ "рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ" рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦрдирд╛ рдФрд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡реЗ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In127364/


All Articles