6 Mart 2011 Pazar

Biztalk Orchestration Loop Shape


İlk önce aşağıdaki resimi inceleyelim. Burada yapılan işlem şudur. loopCount Shape'ine gelen mesajında kaç node olduğu bulunuyor, TempInteger Shape'de o mesajdaki ilk node'dan başlayarak istenilen alandaki değer alınıyor ve counter bir artırılıyor, Decide Shape ile de xml node'undaki değere göre bazı işlemler yapılıyor. Döngü son node'a kadar devam ediyor.



resimdeki Shape'lerdeki kodlamaları veriyorum. Buradaki /* ile başlayan değerler xml node'undaki Instance XPath deki değerdir. Node'daki o değere ulaşmamızı sağlar. Eğer Node çoklu kayıttan oluşuyorsa index yardımı ile TempInteger Shape'inde gözüktüğü gibi alınır.

loopCount Shape:

loopCount = System.Convert.ToInt32(xpath(MsgSelectProcesRes,@"count(/*[local-name()='SelectResponse' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS']/*[local-name()='SelectResult' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS']/*[local-name()='TRANS_AUTO_PROCESSRECORDSELECT' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS'])"));
TempInteger = 1;

TempInteger Shape :

TempString = System.String.Format("string(/*[local-name()='SelectResponse' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS']/*[local-name()='SelectResult' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS']/*[local-name()='TRANS_AUTO_PROCESSRECORDSELECT' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS'][{0}]/*[local-name()='TYPE' and namespace-uri()='http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/TRANS_AUTO_PROCESS'])", TempInteger);
TempString = xpath(MsgSelectProcesRes, TempString);
//System.Diagnostics.EventLog.WriteEntry("Deger-"+TempInteger.ToString() , "Deger : " + TempString );
TempInteger = TempInteger + 1;

Decide Spahe:

Önemli olmamakla birlikte bu shape'de ve diğerinde buna benzer bi kodlama var.
TempString =="O"

4 Mart 2011 Cuma

BizTalk 2009 Dynamic Send Port


Bu port sayesinde send porta yollanacak dosyanın ismini, klasör yolunu değiştirebiliriz.

Portu tanımlarken Port Binding aşamasında;
   Port direction of communication : I'll always be sending messages on this port
   Port Bingding : Dynamic
seçiyoruz.

ConstructMessage'da MessageAssignment Shape'inde aşağıdakine uygun kodlarımızı yazıyoruz.

SndXML = RcvXML;
ruleSndPort(Microsoft.XLANGs.BaseTypes.Address)= "C:\\biztalk\\OUT\\D1_%MessageID%.xml";
ruleSndPort(Microsoft.XLANGs.BaseTypes.TransportType)="FILE";
SndXML(FILE.CopyMode)=1;


BizTalk orchestration'da custom dll function çağırma


Kimi zaman Biztalk orchestration'da işimizi kolaylaştıracak custom dll fonksiyonları çağırmamız gerekir.

Yapılacak işlem şu;
1. projenin referances kısmında dll'i eklemeliyiz.
2. deploy'dan sonra
    BizTalk Server Administration > Applications > ilgili proje > Resources'da sağ tıklayıp
    Add > BizTalk Assemblies'e tıklayıp aşağıdaki resimdeki gibi dll'i GAC(Global Assembly Cache)'a eklemeliyiz.






dll'de değişiklik yaparsak her defasında bu işlemi baştan yapmalı ve
    BizTalk Server Administration > Platform Settings > Host Instances'de BizTalkServerApplication'u restart etmeliyiz.

3 Mart 2011 Perşembe

Biztalk Delay Shape - GMT Problem


Delay Shape bilindiği üzere işleme devam etmek için belirtilen tarih ve saate kadar beklemeyi sağlar. Bu saat formatı UTC (Coordinated Universal Time) formatında olmalıdır.

Mesela

StrRunTime = System.DateTime.Now.ToString("yyyy-MM-ddT") + "15:30:00.00";
RUN_TIME = System.Convert.ToDateTime(StrRunTime);


görüldüğü üzere RUN_TIME date tipinde bir değişken ve o günün 15:30 saatini gösteriyor. Bu değişkeni aşağıdaki gibi Delay Shape'e koyarsak,

new System.DateTime(RUN_TIME);

her gün saat 15:30'dan önce işlem start etmiş olsa bile bu saate kadar bekleyecek ve 15:30'da işleme devam edeceğini düşünürüz. Düşünürüz diyorum çünkü GMT saat farkı yüzünden gerçek saate göre 17:30 da işlem kaldığı yerden devam eder. Bu problemi halletmek için RUN_TIME'i türkiyenin içinde bulunduğu GMT'e göre 2 saat geri almamız gerek.

RUN_TIME aşağıdaki gibi Set edilmesi gerek.

StrRunTime = System.DateTime.Now.ToString("yyyy-MM-ddT") + "15:30:00.00";
RUN_TIME = System.Convert.ToDateTime(StrRunTime);
RUN_TIME = RUN_TIME.AddHours(-2);

Biztalk 2009 WCF Oracle Adapter - Part 4 / 5

Update ve delete'i fırsat bulursam anlatırım fakat zaten mantık aynı. Projeyi Update ve Delete xml tipine uygun mesaj tipleri ile düzenleyeceğiz, OraclePort'ta da SOAP action'a OpUpdate ve OpDelete adında iki operasyon daha tanımlayacağız. Bu kadar.

Biztalk 2009 WCF Oracle Adapter - Part 3


2. INSERT :

Insert işlemi select ile aynı mantıktadır. TBL_PERSON.xsd 'deki insert fotmatlı bir xml yollucaz, ve geri dönüş değeri olarak başarılı veya başarısız olduğunu belli eden bir xml dönücek.

İlk önce yollayacağımız xml'yi hazırlayalım, bunu da daha önce select işlemi sırasında yaptığımız gibi TBL_PERSON.xsd schema'sına sağ tıklayıp Generate Instance yapıcaz. Fakat bu şekilde bize en üstteki tipi olan select xml örneğini üretir. insert'i elde etmek için projenin klasör halinde bir kopyasını oluşturun, bu kopyada insert ve insertResponse haricindeki schema'daki tüm xml yapılarını silin. Şimdi Generate Instance dediğimizde insert xml örneğini output kısmında gösterecektir. Benim insert xml aşağıdaki gibidir. Bu xml'yi bi yere kaydedelim. Ve eski projeye geri dönelim. Burda hiç bişey silinmemişti.

<ns0:Insert xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <ns0:RECORDSET>
  <ns0:PERSONRECORDINSERT>
   <ns0:RECID InlineValue="InlineValue_0">RECID_0</ns0:RECID>
   <ns0:NAME InlineValue="InlineValue_0">NAME_0</ns0:NAME>
   <ns0:CREATEDATE InlineValue="InlineValue_0">1999-05-31T13:20:00.000-05:00</ns0:CREATEDATE>
   <ns0:TYPE InlineValue="InlineValue_0">TYPE_0</ns0:TYPE>
  </ns0:PERSONRECORDINSERT>
 <ns0:COLUMN_NAMES>COLUMN_NAMES_0</ns0:COLUMN_NAMES>
 <ns0:QUERY>QUERY_0</ns0:QUERY>
</ns0:Insert>
Şimdi bu aşamada projemizi biraz geliştiriyoruz. Select işleminde dışarıdan select formatlı bir xml gelmişti ve işleme sokulmuştu, fakat insert formatlı bir xml yollarsak hata verecektir, çünkü PortRcv'a Select xml' tipi mesaj alacağını söylemiştik. Yapacağımız işem şu. Dışarıdan System.Xml.XmlDocument formatlı herhangi bir

xml gelsin, bunun tipine bakalım. Select ise select işlemine, Insert ise Insert işlemine değilse işlem terminate etsin. Bu aşamada Decide Shape'ini kullanacağız, tip kontrolü burada olacak. Tip kontrolüne göre uygun yola devam eden PortRcv'den gelen System.Xml.XmlDocument tipli mesaj ConstructMessage Shape'de uygun mesaja çevrilecek, oracle'a yollanacak ve oracle'dan dönen mesaj da System.Xml.XmlDocument tipli MsgSnd'e atanacak. Bu şekilde System.Xml.XmlDocument tipli mesaj gelmiş ve System.Xml.XmlDocument tipli mesaj çıkmış olacak.

Aşağıdaki resime uygun orchestration'u düzenleyelim. Orchestration View bölümünde mesajların altıya çıktığını görebiliriz, MsgRcv ve MsgSnd mesajları System.Xml.XmlDocument tiplerinde, MsgInsertReq ve MsgInsertRes mesajları sırasıyla BizTalkTest1.TBL_PERSON.Insert ve BizTalkTest1.TBL_PERSON.InsertResponse tiplerinde. Siz projenizde uygun isimdekileri almalısınız.






Projede kullanılan kodlamaları gösterelim.

OraSelect Decide:
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Select"

OraInsert Decide :
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Insert"

OraUpdate Decide :
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Update"

ConstructMessage_1
MsgSelecetReq = MsgRcv;

ConstructMessage_2
MsgInsertReq = MsgRcv;

ConstructMessage_3
MsgSnd = MsgSelecetRes;

ConstructMessage_4
MsgSnd = MsgInsertRes;

ConstructMessage_5
MsgSnd = MsgRcv;

Expression_1
System.Diagnostics.EventLog.WriteEntry("BizTalktest1", "unknown xml");

Terminate_1
"terminated";

BizTalk Server Administration'da projemizi full stop ediyor ve Visual Studio'da projeyi deploy ediyoruz. BizTalk Server Administration'da projemizde sadece 1 yerde değişiklik yapıcaz. Select işleminde oluşturduğumuz Send Ports'daki PortOracleSelect portunun ismini PortOracle yapalım. Çünkü bu porttan oracle'daki tüm işlemlerimizi halledebiliriz, isminin global olması daha okunur olur. ve bu prottan insert işleminin de yapılmasını sağlayacağız.

Yeni SOAP Action bu şekilde olacak


<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Operation Name="OpSelect" Action="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON/Select" />
  <Operation Name="OpInsert" Action="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON/Insert" />
</BtsActionMapping>







Bu haliyle portları enable yapıyoruz ve projeyi start ediyoruz. Ardından Platform Setting altında olan Host Instances'de BiztalkServerApplication'u restart edelim.

Şimdi IN klasöre daha önce daha önceki makalede olduğu gibi select xml'sini atıyoruz. OUT klasörüne sonucu gelmesi gerek. Insert Xml'inin işlemi ise aşadağaki şekilde

IN :

<ns0:Insert xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <ns0:RECORDSET>
  <ns0:PERSONRECORDINSERT>
   <ns0:RECID>4</ns0:RECID>
   <ns0:NAME>GURHAN</ns0:NAME>
   <ns0:CREATEDATE InlineValue="SYSDATE"></ns0:CREATEDATE>
   <ns0:TYPE>C</ns0:TYPE>
  </ns0:PERSONRECORDINSERT>
 </ns0:RECORDSET>
</ns0:Insert>
OUT:

<?xml version="1.0" encoding="utf-8"?>
<InsertResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <InsertResult>1</InsertResult>
</InsertResponse>

Biztalk 2009 WCF Oracle Adapter - Part 2


1. SELECT :
Örneğe başlamadan önce işleyişi kısaca özetlemek istiyorum. Klasöre bir xml dosyası geldiği anda ki bu dosya sorgu dosyamız olacak ve sorgu mesaj tipiyle aynı olacak, process başlayacak. Bu mesaj SndSelectOracle ile sorguya yollanacak, RcvSelectOracle ile sorgu sonucunu alacağız. PortSnd ile de farklı bi klasöre sorgu sonucunu yazacağız.

Bir Biztalk projesi yaratıyoruz ve sağdaki resimde görültüğü gibi orkestrayı yaratıyoruz.

Bizim için önemli olan kısım PortOracleSelect portu. Bu port iki yönlü olacak, bir mesaj yollayacağız ve o bir mesaj geri dönecek. Bu portun tanımlamasını yaparken Request-Response seçilmeli, sonraki adımda "I'll be sending a request and receiving a response" ve "Specifiy later" seçilmelidir. SndSelectOracle ve RcvSelectOracle için mesajlarının tipini belirmek üzere oracle tablosunun schema'sını oluşturmamız gerek. Bu schema'daki xml tiplerini mesaj tiplerine atayacağız.




Schema oluşturma adımları
1. Proje ismine sağ tıklıyoruz Add> Add Generated Items> Add Adapter Metadata seçip add diyoruz.
2. WCF-OracleDB'yi seçip Next diyoruz.
3. Consume Adapter Service gelicek karşımıza resimdeki gibi. Configure butonuna basıyoruz.
3.1. Security tab'ında Client crendential type: Username seçiyoruz, User name ve Password'u giriyoruz. ( benim için ACTPRD - ACTPRD)
3.2. URI Properties tab'ında Service Type : DataSourceName kısmına database adını adını yazıyoruz. (benim için DBPRD)
3.3. Binding Properties tab'ında EnablebizTalkCompatibilityMode kısmını True ve UseAmbientTransaction kısmını False Yapıyoruz.
3.4. OK butonuna basıyoruz ve daha sonra Connect butonuna basıyoruz.





Eğer connection bilgilerini doğru girdiysek karşımıza resimde görüldüğü gibi Schema üzerindeki tablolar gelecektir. İstediğimiz tabloyu seçiyoruz ve yapacağımız operasyonları Add butonu ile alttaki kutuya ekliyoruz. Filename Prefix alanına TBL yazıyorum kısa bir adla başlasın diye. OK butonuna bastıktan sonra şemalar projeye eklenecektir. Yanına bir orchestration daha oluşacaktır, onu silebiliriz. Benim tablomun adı PERSON idi ve schema adı olarak TBL_PERSON olarak yaratıldı. Çift tıklarsak içindeki xml yapısını görebiliriz. Select işleminde Select ve SelectResponse mesaj tiplerini kullanacağız.

Şimdi Orchestration View kısmındaki Messages kısmından SndSelectOracle ve RcvSelectOracle'ye atamak üzere mesaj yaratmamız gerek. Tiplerini de oluşturduğumuz Schema'daki tipleri kullanarak belirteceğiz.
1. Oracle Select için mesaj yaratma : Messages'e sağ tıklıyoruz ve New Message diyoruz. İdentifier'den ismini MsgSelecetReq yapalım ve MessageType olarak Schemas'tan ben BizTalkTest1.TBL_PERSON.Select'i seçiyorum, sizin projenizde sonunda Select olanı seçin.
2. Oracle Select Response için mesaj yaratma : Messages'e sağ tıklıyoruz ve New Message diyoruz. İdentifier'den ismini MsgSelecetRes yapalım ve MessageType olarak Schemas'tan ben BizTalkTest1.TBL_PERSON.SelectResponse'i seçiyorum, sizin projenizde sonunda SelectResponse olanı seçin.


Oluşturduğumuz mesajları SndSelectOracle ve RcvSelectOracle kutularına atmamız gerek. SndSelectOracle için Porperties'de Message değerini MsgSelectReq seçiyoruz. RcvSelectOracle için ise MsgSelectRes'i seçiyoruz. Bu şekilde kutulara sorgulamada kullanılacak mesaj tiplerini de göstermiş olduk. Daha sonra SndSelectOracle ve RcvSelectOracle kutularını PortOracleSelect portuna bağlıyoruz. Rcv'nin mesaj tipini MsgSelecetReq, Snd'nin mesaj tipini MsgSelecetRes yapıyoruz ve onu da portlar ile ki portların request tipleri de mesajlara uygun olmak zorunda, bağlıyoruz.


Proje kısmında yapacaklarımız bu kadar. Projeye sağ tıklayıp build dediğimizde sorunsuz build olması gerek. Şimdi projeyi deploy edeceğiz fakat ondan önce projeye sağ tıklayıp Properties kısmına gelelim. Deploy sırasında hata gelmemesi için signing kısmından bi key yaratıyoruz ve Deploymen kısmında Application Name'a proje ismini verelim ( benim proje adım BiztalkTest1), Server kısmına .(nokta=localhost) yazalım. Şimdi Projeye sağ tıklayıp Deploy diyoruz. BizTalk Server Administration'a projemiz gelmiş olacaktır.

Şimdi, BizTalk Server Administration'da projemizi buluyoruz ve daha önce "Specifiy later" dediğimiz port tanımlamalarını yapmaya başlıyoruz. Bilgisayarın C dizininde BiztalkTest diye bi klasör oluşturalım, onun içine de IN ve OUT adında klasörler daha yaratalım. Port tanımlamalarını Orchestrations üzerinden yapacağız. Orchestrations'a tıklıyoruz ve sağda çıkan ekrandaki orchestration'a sağ tıklıyoruz, Properties'i seçiyoruz, ordan Bindings'i seçiyoruz.

1. PortRcv ve PortSnd kısımlarını tanımlıyoruz. Konunun uzamaması için anlatmıyorum.
2. PortOracleSelect kısmı bizim için önemli : New port diyoruz ve makalenin başında bahsettiğim Type kısmında OracleDB'yi seçiyoruz. Configuration'a tıklıyoruz.
2.1. General kısmında configure'ya tıklıyoruz, DataSourceName = DBPRD yazıyoruz.
2.2. Binging kısmında EnablebizTalkCompatibilityMode kısmını True ve UseAmbientTransaction kısmını False Yapıyoruz.
2.3. Credentials kısmında Do not user Single Sing-On kısmına User name ve Password'u giriyoruz. ( benim için ACTPRD - ACTPRD)
2.4. OK dedikten sonra SOAP Action header kısmını tanımlayacağız. Bu kısımda projedeki oluşturduğumuz schema'dan yararlanmamız gerek. Hangi operasyonun hangi işlemi yapacağını tanımlayacağız porta.







Aslında SOAP Action Header'i tanımlarken IN klasörüne gelecek olan xml formatını da burdan öğreneceğiz. Projeye gelelim. Benim projemde TBL_PERSON.xsd olarak gözüken schema'ya sağ tıklayıp Generate Instance diyoruz. bu bize o tipe uygun bir xml dosyası yaratacaktır. Output kısmındaki linke tıklarsanız xml'i göreceğiz. Benim xml formatı bu şekilde:

<ns0:Select xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<ns0:COLUMN_NAMES>COLUMN_NAMES_0</ns0:COLUMN_NAMES>
<ns0:FILTER>FILTER_0</ns0:FILTER>
</ns0:Select>
Bu xml bizim sorgu yapacak SndSelectOracle portu ile yollayacağımız xml. bunu bir yere kaydedelim. SOAP Action ise aşağıdaki şekilde olacak. Name kısmı projedeki port operation name ismi olmak zorunda. Action bilgisi ise yukarıdaki xml'i inceleyerek nasıl yarattığıma bakın. ns0 bilgisinin sonuna /Select'i ekledim.

<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="OpSelect" Action="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON/Select" />
</BtsActionMapping>
bu şekilde projeyi tamamlamış olduk, portları enable yapıyoruz ve projeyi start ediyoruz. Ardından Platform Setting altında olan Host Instances'de BiztalkServerApplication'u restart edelim. Bunu projede her değişiklik yaptıktan sonra yapmamız gerek, yoksa değişiklikler yansımaz.

Test'e başlayalım.
içeriği aşağıda olan test.xml dosyasını IN klasörüne atıyorum ve OUT klasörüne onun da altındaki xml dosyası oluşuyor.

IN :

<ns0:Select xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<ns0:COLUMN_NAMES>NAME,TYPE</ns0:COLUMN_NAMES>
<ns0:FILTER>recid=2</ns0:FILTER>
</ns0:Select>


OUT:

<?xml version="1.0" encoding="utf-8"?>
<SelectResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<SelectResult>
<PERSONRECORDSELECT>
<NAME>OMER</NAME>
<TYPE>C</TYPE>
</PERSONRECORDSELECT>
</SelectResult>
</SelectResponse>

2. INSERT : yakında

3. UPDATE : yakında

2 Mart 2011 Çarşamba

Biztalk 2009 WCF Oracle Adapter - Part 1


Bu makale dizisi, biztalk 2009'dan oracle veritabanına bağlanarak oracle adapter kurulumu, select, insert, update, delete işlemlerini yapacağımız 5 kısımdan oluşmaktadır. Bu makalede Biztalk 2009 için Oracle düzenlemlerini yapacağız. Biztalk 2009 kurulumda oracle adapter ile gelmez.

Örneklere başlamadan önce aşağıdaki dört aşamadan olusam kurulumları ve tanımlamayı yapmamız gerek.

a. WCF LOB Adapter SDK SP2
note : the tools section must be checked on install

b. BizTalk Adapter Pack

c. Biztalk 2009 oracle'a bağlantı sırasında resimde de gözüktüğü gibi "Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified" gibi bi hata çıkarabilir. Versiyon uyumsuzluğundan kaynaklanan bu sorunu Oracle.DataAccess versiyonunu güncelleyerek hallediyoruz. Bu kurulum normal oracle client kurulumudur ki bu sırada Oracle.DataAccess versiyonunu pc'ye yükleyecektir. Versiyon kontrolü için C:\WINDOWS \assembly klasörüne bakabilirsiniz.

ODAC1110720.zip 188 MB (197,638,641 bytes)
Download the Oracle Universal Installer version



d. Bu üç kurulumu yaptıktan sonra, projeyi deploy sırasında port tanımlamasında gerekli olacak oracle adapter'ini tanımlıyoruz. BizTalk Server Administration'da Adapters'e sağ tıklayıp New diyoruz, Name kısmına oracleDB diyebilirsiniz, Adapter kısmından WCF-OracleDB'i seçiyoruz ve OK diyoruz. Sağdaki resimdeki gibi port Adapters'e gelecektir.

Tanımlamaları yaptığımıza göre örneklerimize başlayabiliriz. Örneklere resimlerle ve üzerinde anlatımlar yaparak ilerleyeceğiz. Bu makaleleri ilk hazırlarken tüm adımları resimlerle anlatarak ilerliyordum fakat belli bir noktadan sonra işin içinden çıkılmaz hale geldiğini farkedince daha sade anlatmaya karar verdim. Onun için teferruatları sizin bildiğinizi farzedeceğim.



Örneklere başlamadan önce kullanıdığım tabloyu görmek istersiniz diye scriptini yazıyorum;

CREATE TABLE PERSON(
   RECID NUMBER,
   NAME VARCHAR2(100 BYTE),
   CREATEDATE DATE,
   TYPE CHAR(1 CHAR)
);