Kurz vor Weihnachen noch ein Tipp ...
SQL> shutdown immediate
Frohe Weihnachten und einen guten Rusch ins neue Jahr 2008
SQL> shutdown immediate
Eingestellt von
Carsten Czarski
um
11:05
0
Kommentare
Lesen
create view V_DEPT_XML of XMLTYPE
with object oid (extract(sys_nc_rowinfo$, '/department/@id').getnumberval())
as
select
XMLElement("department",
XMLAttributes(d.deptno as "id"),
XMLElement("name", d.dname),
XMLElement("location", d.loc),
XMLElement("employees",
(
select
XMLAgg(
XMLElement("employee",
XMLAttributes(e.empno as "id"),
XMLElement("name", e.ename),
XMLElement("hiredate", e.hiredate),
XMLElement("payment-info",
XMLForest(e.sal as "salary", e.comm as "commission")
)
)
)
from emp e where e.deptno = d.deptno
)
)
)
from dept d
/
SQL> select COLUMN_NAME, DATA_TYPE, VIRTUAL_COLUMN, HIDDEN_COLUMN from user_tab_cols where TABLE_NAME='V_DEPT_XML' COLUMN_NAME DATA_TYPE VIR HID ------------------------------ ------------------------------ --- --- SYS_NC_ROWINFO$ XMLTYPE NO NO SYS_NC_OID$ RAW NO YES 2 Zeilen ausgewählt.
SQL> select ref(e) from v_dept_xml e; REF(E) -------------------------------------------------------------------------------- 00004A038A0046417A36A09945F1DBE040A8C08C0211B20000001426010001000100290000000000 090602002A00078401FE0000000A02C10B0000000000000000000000000000000000000000 00004A038A0046417A36A09945F1DBE040A8C08C0211B20000001426010001000100290000000000 090602002A00078401FE0000000A02C1150000000000000000000000000000000000000000 00004A038A0046417A36A09945F1DBE040A8C08C0211B20000001426010001000100290000000000 090602002A00078401FE0000000A02C11F0000000000000000000000000000000000000000 00004A038A0046417A36A09945F1DBE040A8C08C0211B20000001426010001000100290000000000 090602002A00078401FE0000000A02C1290000000000000000000000000000000000000000
declare v_res boolean; begin for i in ( select ref(e) as reference, extractvalue(object_value, '/department/@id') as id from v_dept_xml e ) loop v_res := dbms_xdb.createresource( abspath => '/public/department-'||i.id||'.xml', data => i.reference, sticky => true ); end loop; end; / sho err commit /
220- vmware.de.oracle.com Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecution. 220 vmware.de.oracle.com FTP Server (Oracle XML DB/Oracle Database) ready. ftp> user scott tiger 331 pass required for SCOTT 230 SCOTT logged in ftp> cd /public 250 CWD Command successful ftp> dir 200 PORT Command successful 150 ASCII Data Connection -rw-r--r-- 1 SCOTT oracle 0 DEC 17 11:16 department-10.xml -rw-r--r-- 1 SCOTT oracle 0 DEC 17 11:16 department-20.xml -rw-r--r-- 1 SCOTT oracle 0 DEC 17 11:16 department-30.xml -rw-r--r-- 1 SCOTT oracle 0 DEC 17 11:16 department-40.xml 226 ASCII Transfer Complete ftp: 292 bytes received in 0,00Seconds 292000,00Kbytes/sec. ftp>
Eingestellt von
Carsten Czarski
um
15:31
1 Kommentare
Lesen
Eingestellt von
Carsten Czarski
um
18:41
2
Kommentare
Lesen
CREATE TABLE XMLTAB1 (xml_document XMLTYPE);
CREATE TABLE XMLTAB2 OF XMLTYPE;
SQL> select COLUMN_NAME, DATA_TYPE, VIRTUAL_COLUMN, HIDDEN_COLUMN from user_tab_cols where TABLE_NAME='XMLTAB1' COLUMN_NAME DATA_TYPE VIR HID ------------------------------ ------------------------------ --- --- XML_DOCUMENT XMLTYPE YES NO SYS_NC00002$ CLOB NO YES
SQL> select COLUMN_NAME, DATA_TYPE, VIRTUAL_COLUMN, HIDDEN_COLUMN from user_tab_cols where TABLE_NAME='XMLTAB2' COLUMN_NAME DATA_TYPE VIR HID ------------------------------ ------------------------------ --- --- SYS_NC_OID$ RAW NO YES SYS_NC_ROWINFO$ XMLTYPE YES NO XMLDATA CLOB NO YES
SQL> insert into xmltab2 values ('<xml-dokument>Ein Text</xml-dokument>');
1 row created.
SQL> select ref(e) from XMLTAB2 e;
REF(E)
--------------------------------------------------------------------------------------
000028020940B3A963EF38DC29E040A50A86F8248140B3A963EF37DC29E040A50A86F824810141DA550000
declare v_ref ref xmltype; v_res boolean; begin select ref(e) into v_ref from xmltab2 e; v_res := dbms_xdb.createresource( abspath => '/public/testdatei.xml', -- Pfad, unter dem die virtuelle Datei erzeugt werden soll data => v_ref, -- Pointer auf die Tabellenzeile sticky => true -- "Klebrig"; beim Löschen der Tabellenzeile verschwindet -- auch die virtuelle Datei ); end; / sho err commit /
ftp> open host 2100 Connected to host.mydomain.com. 220- host Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecution. 220 host FTP Server (Oracle XML DB/Oracle Database) ready. ftp> user scott tiger 331 pass required for SCOTT 230 SCOTT logged in ftp> cd /public 250 CWD Command successful ftp> dir 200 PORT Command successful 150 ASCII Data Connection -rw-r--r-- 2 SCOTT oracle 0 DEC 12 13:03 testdatei.xml 226 ASCII Transfer Complete ftp> get testdatei.xml 226 ASCII Transfer Complete ftp: 37 bytes received in 0,05Seconds 1298,24Kbytes/sec.
Eingestellt von
Carsten Czarski
um
16:51
0
Kommentare
Lesen
Labels: binary xml, DBMS_XDB, objektrelational, ref, xdb, xml
Eingestellt von
Carsten Czarski
um
11:06
0
Kommentare
Lesen
set define off
drop procedure get_mail_headers
/
drop type mail_header_ct
/
drop type mail_header_t
/
create or replace type mail_header_t as object(
subject varchar2(4000),
sender varchar2(100),
sender_email varchar2(100),
sent_date date,
deleted char(1),
read char(1),
recent char(1),
answered char(1)
)
/
create or replace type mail_header_ct as table of mail_header_t
/
create or replace java source named "GetMailHeaders" as
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import java.util.Vector;
import javax.mail.Folder;
import javax.mail.FetchProfile;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Flags;
import javax.mail.internet.InternetAddress;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
class getMails {
public static ARRAY getMails(String host, int port, String user, String pass, int maxHeaders)
throws Exception {
Connection con = DriverManager.getConnection("jdbc:default:connection:");
ArrayDescriptor aDescr = ArrayDescriptor.createDescriptor("MAIL_HEADER_CT", con);
StructDescriptor rDescr = StructDescriptor.createDescriptor("MAIL_HEADER_T", con);
Object[] mailHeader = new Object[8];
STRUCT oraMail = null;
Vector vMails = new Vector();
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
Session s = Session.getDefaultInstance(props);
Store store = s.getStore();
store.connect(host, port, user, pass);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
folder.fetch(message, fp);
String sPersonal = null;
for (int i=message.length-1; i>=0 && ((i>=(message.length - maxHeaders)) || maxHeaders == -1);i--) {
mailHeader[0] = new String(message[i].getSubject());
sPersonal = ((InternetAddress)(message[i].getFrom()[0])).getPersonal();
if (sPersonal == null) {
mailHeader[1] = new String("");
} else {
mailHeader[1] = new String(sPersonal);
}
mailHeader[2] = new String(((InternetAddress)(message[i].getFrom()[0])).getAddress());
mailHeader[3] = new java.sql.Timestamp(message[i].getSentDate().getTime());
mailHeader[4] = (message[i].isSet(Flags.Flag.DELETED)?"Y":"N");
mailHeader[5] = (message[i].isSet(Flags.Flag.SEEN)?"Y":"N");
mailHeader[6] = (message[i].isSet(Flags.Flag.RECENT)?"Y":"N");
mailHeader[7] = (message[i].isSet(Flags.Flag.ANSWERED)?"Y":"N");
oraMail = new STRUCT(rDescr, con, mailHeader);
vMails.add(oraMail);
}
folder.close(false);
store.close();
return new ARRAY(aDescr, con, vMails.toArray());
}
}
/
alter java source "GetMailHeaders" compile
/
sho err
create or replace function get_mail_headers( p_mailhost in varchar2, p_mailport in number, p_username in varchar2, p_password in varchar2, p_max_mails in number ) return MAIL_HEADER_CT is language java name 'getMails.getMails( java.lang.String, int, java.lang.String, java.lang.String, int ) return oracle.sql.ARRAY'; /
begin dbms_java.grant_permission( grantee => 'SCOTT', permission_type => 'SYS:java.net.SocketPermission', permission_name => 'mailserver.mydomain.com', permission_action => 'connect,resolve' ); end; / commit /
select sender, subject from table( get_mail_headers( 'mailserver.domain.com', 143, 'carsten.czarski', 'ganzgeheim', -1 ) ) / SENDER SUBJECT -------------------------------------- ---------------------------------------- Max.Muster@maildomain.com Hallo Carsten : :
Eingestellt von
Carsten Czarski
um
15:13
7
Kommentare
Lesen
Labels: imap, java mail, plsql, sql, table functions
|
|
|
|