1 declare
2 t clob;
3 my_vr varchar2(200);
4 i1 number;
5 begin
6 i1 := 200;
7 select text into t from doc_table where rowid='AAAWsCAAJAAA/AaAAC';
8 dbms_lob.read(t,i1,1,my_vr);
9 dbms_output.put_line(my_vr);
10* end;
Surface treatment for improved hardness and corrosion resistance - Patent
6497772
Patent Number:
Advanced Search
Site Contents
Search Patents
Use our
search engine to find what you need
Syntax Ref
Pazartesi, Aralık 12, 2005
Pazar, Aralık 11, 2005
Sozluk yaratma
ctxload -user ctxsys /ctxsyssifre@orasid -thes -thescase y -name nstc -file nstc.thes
begin
Ctx_Thes.Drop _Thesaurus (
name => 'mythes' );
end;
/
select ths_owner, ths_name from ctx_thesauri;
Çarşamba, Aralık 07, 2005
Kelime Aydınlatma
create table markup_tab (query_id number, document clob);
set pagesize 1000
set long 10000
begin
ctx_doc.markup(index_name => 'temp_text_idx',
textkey => 'AAAWsCAAJAAA3G0AAI',
text_query => 'sqe(ships)',
restab => 'markup_tab',
query_id => '1',
tagset =>'HTML_DEFAULT');
end;
select document from markup_tab;
Örnek sonuç:
...its fleet of ships from marine micro-organism "Fouling", the coating techn...
set pagesize 1000
set long 10000
begin
ctx_doc.markup(index_name => 'temp_text_idx',
textkey => 'AAAWsCAAJAAA3G0AAI',
text_query => 'sqe(ships)',
restab => 'markup_tab',
query_id => '1',
tagset =>'HTML_DEFAULT');
end;
select document from markup_tab;
Örnek sonuç:
...its fleet of ships from marine micro-organism "Fouling", the coating techn...
Çarşamba, Kasım 30, 2005
Contains içinde PL/SQL fonskiyonları
Farzedelim turkcesi fonksiyonu verilen İngilizce kelimenin Türkçe karşılığını veriyor ve kullanıcısın bu fonksiyonu yürütme hakkı var. Bu durumda aşağıdaki şekilde Contains sorgusu içinde fonksiyon şu şekilde kullanılabilir:
SELECT SCORE(1), title from news WHERE CONTAINS(text, turkcesi('cat'), 1) > 0 ORDER BY SCORE(1);
Örnek fonksiyon:
Create or Replace Function Get_Terms ( inTerm IN VARCHAR2 )
return VARCHAR2
as
my_thes VARCHAR2(4) := 'NSTC';
xtab ctx_thes.exp_tab;
result VARCHAR2(1000);
begin
ctx_thes.syn(xtab,inTerm,my_thes);
result := xtab(1).xphrase;
for i in 2..xtab.count loop
result:= result ' accum ' xtab(i).xphrase;
end loop;
dbms_output.put_line(result);
return result;
end;
select name, score(1) from doc_table where contains(text,ctxsys.get_terms('ships'),1)>0
SELECT SCORE(1), title from news WHERE CONTAINS(text, turkcesi('cat'), 1) > 0 ORDER BY SCORE(1);
Örnek fonksiyon:
Create or Replace Function Get_Terms ( inTerm IN VARCHAR2 )
return VARCHAR2
as
my_thes VARCHAR2(4) := 'NSTC';
xtab ctx_thes.exp_tab;
result VARCHAR2(1000);
begin
ctx_thes.syn(xtab,inTerm,my_thes);
result := xtab(1).xphrase;
for i in 2..xtab.count loop
result:= result ' accum ' xtab(i).xphrase;
end loop;
dbms_output.put_line(result);
return result;
end;
Bir fonksiyonu ya da prosedürü başka kullanıcılara yürütme hakkı vermek için gerekli yazım kuralı:
grant execute on object to user;
select name, score(1) from doc_table where contains(text,ctxsys.get_terms('ships'),1)>0
Salı, Kasım 01, 2005
Oracle, Hazır Java Prosedürleri
[oracle@ullman oracle]$ loadjava -u kullanici/sifre -v -resolve oracle.java
arguments: '-u' 'kullanici/sifre' '-v' '-resolve' 'oracle.java'oracleoradb: relocation error: /opt/oracle/product/9.2.0.2/lib/libjox9.so: undefined symbol: __fixunssfdiSQL Error while connecting with oci8 driver to default database: ORA-12547: TNS:lost contact
exiting : could not open connection
hatasi alinca hemen yapmaniz gerekn degiklik su:
loadjava -u kullanici/sifre@oracle_sid -v -resolve oracle.java
Ornek bir java kodu:
import oracle.jdbc.*;
import java.sql.*;
public class oracle {
public static void show(){
System.out.println("Your tables");
try {
Connection conn =
DriverManager.getConnection("jdbc:default:connection:");
String sql =" select table_name from cat";
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
String name =rs.getString("table_name");
System.out.println(name);
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
Diger Ornek:
Bunun icin once jakarta.oro paketini yuklemek gerek.
loadjava -u user/passwd@oradb -v -resolve jakarta-oro-2.0.8.jar
sonra
loadjava -u user/passwd@oradb -v -resolve CompareDates.java
import org.apache.oro.text.regex.*;
public class CompareDates {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Compare("Fri Nov 09 00:56:48 EST 1969", "2007"));
}
public static int Compare(String s_date1, String s_date2){
int date1 = 0;
int date2 = 0;//
PatternMatcherInput input;
//April 13, 2001
String regexp = "[1-2][0-9]{3}";
PatternCompiler compiler = new Perl5Compiler();
input = new PatternMatcherInput(s_date1);
try{
Pattern pattern = compiler.compile(regexp, Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcher = new Perl5Matcher();
MatchResult result = null;
while (matcher.contains(input,pattern)){
result = matcher.getMatch();
date1 = Integer.parseInt(result.group(result.groups()-1)); }
input = new PatternMatcherInput(s_date2);
while (matcher.contains(input,pattern)){
result = matcher.getMatch();
date2 = Integer.parseInt(result.group(result.groups()-1));
}
catch (MalformedPatternException e){
System.out.println(e.getMessage());
}
if (date1> date2){
return date1;
}
else {
return date2;
}
}
}
CREATE OR REPLACE FUNCTION compare_dates
(date1 IN VARCHAR2, date2 IN VARCHAR2)
RETURN NUMBER IS
LANGUAGE JAVA
NAME 'CompareDates.Compare(java.lang.String, java.lang.String) return int';
/
Kullanimi:
select compare_dates('2004','1694') from dual;
Sonuc:
COMPARE_DATES('2004','1694')
----------------------------
2004
arguments: '-u' 'kullanici/sifre' '-v' '-resolve' 'oracle.java'oracleoradb: relocation error: /opt/oracle/product/9.2.0.2/lib/libjox9.so: undefined symbol: __fixunssfdiSQL Error while connecting with oci8 driver to default database: ORA-12547: TNS:lost contact
exiting : could not open connection
hatasi alinca hemen yapmaniz gerekn degiklik su:
loadjava -u kullanici/sifre@oracle_sid -v -resolve oracle.java
Ornek bir java kodu:
import oracle.jdbc.*;
import java.sql.*;
public class oracle {
public static void show(){
System.out.println("Your tables");
try {
Connection conn =
DriverManager.getConnection("jdbc:default:connection:");
String sql =" select table_name from cat";
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
String name =rs.getString("table_name");
System.out.println(name);
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
Diger Ornek:
Bunun icin once jakarta.oro paketini yuklemek gerek.
loadjava -u user/passwd@oradb -v -resolve jakarta-oro-2.0.8.jar
sonra
loadjava -u user/passwd@oradb -v -resolve CompareDates.java
import org.apache.oro.text.regex.*;
public class CompareDates {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Compare("Fri Nov 09 00:56:48 EST 1969", "2007"));
}
public static int Compare(String s_date1, String s_date2){
int date1 = 0;
int date2 = 0;//
PatternMatcherInput input;
//April 13, 2001
String regexp = "[1-2][0-9]{3}";
PatternCompiler compiler = new Perl5Compiler();
input = new PatternMatcherInput(s_date1);
try{
Pattern pattern = compiler.compile(regexp, Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcher = new Perl5Matcher();
MatchResult result = null;
while (matcher.contains(input,pattern)){
result = matcher.getMatch();
date1 = Integer.parseInt(result.group(result.groups()-1)); }
input = new PatternMatcherInput(s_date2);
while (matcher.contains(input,pattern)){
result = matcher.getMatch();
date2 = Integer.parseInt(result.group(result.groups()-1));
}
catch (MalformedPatternException e){
System.out.println(e.getMessage());
}
if (date1> date2){
return date1;
}
else {
return date2;
}
}
}
CREATE OR REPLACE FUNCTION compare_dates
(date1 IN VARCHAR2, date2 IN VARCHAR2)
RETURN NUMBER IS
LANGUAGE JAVA
NAME 'CompareDates.Compare(java.lang.String, java.lang.String) return int';
/
Kullanimi:
select compare_dates('2004','1694') from dual;
Sonuc:
COMPARE_DATES('2004','1694')
----------------------------
2004
ctxsys fonksiyonları
Ctxsys kullacısına ait fonksiyonları kendinize göre düzenleyip yeni fonksiyonlar oluşturmak istediğinizde ne yazık ki ctxsys kullanıcısı olarak bu fonksiyonları oluşturduktan sonra herkese çalıştırma hakkı vermekten başka çözüm yok gibi. En azından bu işe yarıyor.
create or replace procedure get_synset( term IN VARCHAR2)
AS
my_thes VARCHAR2(4) := 'NSTC';
xtab ctx_thes.exp_tab;
begin
ctx_thes.syn(xtab,term,my_thes);
for i in 1..xtab.count loop
dbms_output.put_line(lpad(' ',2*xtab(i).xlevel)
xtab(i).xrel ' ' xtab(i).xphrase);
end loop;
end;
grant execute on get_synset to public;
Prosedürler
select * from user_objects where object_type = 'PROCEDURE';
select text from user_source where name = 'PROCEDURE_NAME';
select text from user_source where name = 'PROCEDURE_NAME';
Cuma, Ekim 21, 2005
DB2
Tamam Oracle dedim DB2 komutlarını da yazmaya başladım farkındayım. Sonra düzenleyeceğim.
Bir öğrenci tablolar yaratmış birkaç tane. Ne olduysa bir tablodan seçme, ekleme gibi işlemleri yapamaz hatta tabloyu düşüremez hale gelmiş. Yapacak başka çare yok bu kullanıcının bütün uygulamalarını sonlandırmak lazım. Muhtemelen sonsuz döngüye girmiş ama bununla uğraşacak kadar vakit yok ve de kaybedecek bir şey de yok. O nedenle db2inst1 (kendi sistemizde farklı olabilir) kullanıcısı olarak girip
db2 "list active
databases"db2 "list applications" ya da
db2 "list applications show detail"db2 force application ALL ya
da db2 force application (n)
db2 kabuğuna gidip ? yazarak tüm komutlar hakkında bilgi alabilirsiniz.
Diğer yararlı kodlar:
db2 update monitor switches using LOCK ON
db2 get snapshot for LOCKS on dbName >
Şimdi Dizi_adı/lock_snapshot.log DB2 kilit bilgisini içeriyor.
Kilit gözlemcisini şu komutu işleterek kapatın:
db2 update monitor switches using LOCK OFF
Çarşamba, Ekim 19, 2005
Tablo kopyalamak
SQLPlus kullarak bir veritabanından diğerine şu örnekte olduğu gibi veri aktarımı yapabilirsiniz ama bu verilerin tipleri CHAR, DATE, LONG, NUMBER, VARCHAR2 ile kısıtlı.
COPY FROM HR/your_password@ORACLE01 -
CREATE SALESMEN (EMPLOYEE_ID, SA_MAN) -
USING SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES -
WHERE JOB_ID='SA_MAN';
Çarşamba, Ekim 05, 2005
SQLPlus komutları
Bu sitede bazı kullanışlı sqlplus komutları var. Özellikle EDIT çok işe yarıyor...
Pazartesi, Eylül 26, 2005
DB2 ve JSP
Geçen sen kasıp yapamadığımı bu sene hallettim. Oracle HTTP sunucusunu DB2'ya bağlanması için ayarlamam gerekiyordu. Şans mı bilmem. Neyse
/opt/oracle/product/9.2.0.2/Apache/Jserv/etc/jserv.properties
dosyasına şunu ekliyoruz
wrapper.classpath=/opt/oracle/product/9.2.0.2/jdbc/lib/db2java.zip
wrapper.classpath=/opt/oracle/product/9.2.0.2/jdbc/lib/db2jcc.jar
sonra apachectl graceful diyerek yeniden başlatıyoruz web sunucusunu.
Daha sonra aşağıdaki uyarıya göre db2jstrt komutuyla dinleyici çalıştırıyoruz.
/opt/oracle/product/9.2.0.2/Apache/Jserv/etc/jserv.properties
dosyasına şunu ekliyoruz
wrapper.classpath=/opt/oracle/product/9.2.0.2/jdbc/lib/db2java.zip
wrapper.classpath=/opt/oracle/product/9.2.0.2/jdbc/lib/db2jcc.jar
sonra apachectl graceful diyerek yeniden başlatıyoruz web sunucusunu.
Daha sonra aşağıdaki uyarıya göre db2jstrt komutuyla dinleyici çalıştırıyoruz.
DB2 için kullanacağımız bağlantı katarı şu şekilde test edilebilir
The DB2 UDB JDBC Applet Server is started with the command:db2jstrt <port number>
Every time the db2jstrt command is executed, a db2jd process is created.
<%@page import="java.sql.*"%>
<% // Define the connection Connection con = null; // Check that the DB2Driver class is available System.getProperty("java.library.path"); Class.forName("COM.ibm.db2.jdbc.net.DB2Driver"); try { // DB2 veritabanına bağlanma denemesi DriverManager.registerDriver (new COM.ibm.db2.jdbc.net.DB2Driver()); out.println("Test başlıyor... "); con = DriverManager.getConnection("jdbc:db2://localhost:6789/user","user","passwd"); out.println("Test başarıyla tamamlandı. DB2'ya bağlanıldı. "); } // Hata oluşursa bilelim catch (SQLException e) { out.println(e.getMessage()); } %>
Pazar, Eylül 25, 2005
XML in Oracle Text 9.0
Bu konuda bayağı yol aldık aslında. Özellikle 10g ile indeksi sorgularken çıktıları XML dosya olarak almak daha sonra bu bilgileri süzmek için aşırı kolaylık sağlıyor. Aksi taktirde metin dosyadan istediğiniz bilgiyi toplamak için oku dur.
Oracle Text Örneği
Word, PDF gibi dökümanları BLOB olarak depolamak üzere bir PROCEDURE örneği bu. TYPE ve dizin tanımlamasına, kullanımına dikkat edin. Ancak ilgimi çeken indekslerken filtreleme, doküman tipi bilgisini depolama gereği duymaması. Kendi uygulamalarımda önceden salt metine dönüştürüp CLOB olarak depoluyorum ve indeksliyorum. Bu daha kolay çözüm gerçekten çalışıyorsa hatasız.
Çarşamba, Eylül 14, 2005
Depolanmış sorgular
Depolanamış hazır sorgu cümleleri hazırlama:
Kullanımı:
select ... where contains (metin, 'sqe(ships)',1) >0 ;
begin
ctx_query.remove_sqe('ships');
ctx_query.store_sqe('ships', 'ship OR argosy OR battleship OR containership OR corvette OR flagship OR icebreaker OR ironclad OR lightship OR man-of-war OR submarine OR supertanker OR vessel OR warship');
end;
Kullanımı:
select ... where contains (metin, 'sqe(ships)',1) >0 ;
Komedi
Uzun aradan sonra projeye devam derken Oracle'ın tema fonksiyonu ile başıma gelenler.
:mayflowers:flowering plants:plant kingdom:botany:biology:life sciences:hard sciences:science and technology:
Metnin kendisi gemilerler ilgili ve herneyse Mayflower Resolution'dan bahsedip duruyor yazıda. Neticede toplam 12 kere tekrar edince bizim kısıtlı bilgi depomuz da bunu çicek olarak alıp geliştirdi. E ne yapacağız, kendi depomuzu açacağız. Çok sıkıcı bir iş. Yok büyük küçük harf ayrımı yapacak şekilde oluştaracak mışız yok şöyleymiş. Yapacağız artık.
:mayflowers:flowering plants:plant kingdom:botany:biology:life sciences:hard sciences:science and technology:
Metnin kendisi gemilerler ilgili ve herneyse Mayflower Resolution'dan bahsedip duruyor yazıda. Neticede toplam 12 kere tekrar edince bizim kısıtlı bilgi depomuz da bunu çicek olarak alıp geliştirdi. E ne yapacağız, kendi depomuzu açacağız. Çok sıkıcı bir iş. Yok büyük küçük harf ayrımı yapacak şekilde oluştaracak mışız yok şöyleymiş. Yapacağız artık.
Perşembe, Temmuz 28, 2005
sqlplus ve uzun satirlar
declare terms varchar2(10000);
begin
terms :=ctx_thes.nti('contractors',5,'nstc');
dbms_output.put_line(substr('the narrower expansion for nstc is :' || terms,1,255));
end;
begin
terms :=ctx_thes.nti('contractors',5,'nstc');
dbms_output.put_line(substr('the narrower expansion for nstc is :' || terms,1,255));
end;
Perşembe, Mayıs 05, 2005
& dan kurtuluş
Bundan önceki programcıkta neden & işaretini AND ile değiştirdiğimi gizlemiştim. SQLPlus'ta kodu çalıştırırken &'den sonraki kelime bir parametre olarak algılandığından ne yaptıysam bunu engellemeyi becerememiştim. Şu an çözümü biliyorum. Kodu çalıtırmadan önce SET DEFINE OFF diyerek bu özel durumu engelleyebiliyorsunuz. Aslında ilginç bir durum. Derleyici tasarımı dersi alana kadar bu tür olayların nasıl tasarlanacağı hakkında en ufak fikrim yoktu. Şu an ise ne kadar zor olacağını düşünüyorum. :)
Pazartesi, Nisan 04, 2005
Sözlüğe toplu kelime eklemek
Gerekti ki bir siteden elde ettiğim şirket adlarını sözlüğün MANUFACTURERS AND SUPPLIERS kökünün yaprakları olarak eklenmeli. Daha önceki yazıda sözlüğümüzü büyük küçük harf ayrımını dikkate alarak yapmamız gerektiğini belirtmiştim. Bu nedenle her kelimeyi ve arama yapacağım metni büyük harfe çevirmeyi uygun gördüm. Her ne kadar insan için bu anlaşılırlığı azaltacaksa da amacımız makinalara anlatmak. Bu nedenle ilk olarak Perl dilinde şu programcığı kullandım:
#!/usr/bin/perl
open(IN, $ARGV[0]) die "Couldn't open the file!";
open(OUT, ">".$ARGV[1]);
while (){
tr/a-z/A-Z/;
s/\&/AND/;
print OUT;
}
close (IN);
close (OUT);
Daha sonra aşağıdaki programı kullanarak bir dosyada satır satır yazılı şirket adlarını sözlüğe yerleştirecek PL/SQL komutcuk dizisini oluşturdum.
#!/usr/bin/perl -w
open(IN,$ARGV[0]) die("Cannot open the input file!");
open(OUT, ">".$ARGV[1]) die("Cannot open the output file!");
print OUT "begin\n";
while (defined($line=)){
chomp($line);
print OUT "ctx_thes.create_relation('nstc','MANUFACTURERS AND SUPPLIERS','NTI','".$line."');\n" ;
}
print OUT "end;\n/\n";
Sonrada PL/SQL de bu dosyayı yürüttüm. E direk PL/SQL'de de yazabilirdim ama amaç biraz Perl tecrübesi. Larry Wall tarafından tasarlanan Perl'ün, web üstündeki içeriğin %85'inin arkasındaki CGI programlama(script) dili olduğu tahmin ediliyormuş. [Bkz.]
#!/usr/bin/perl
open(IN, $ARGV[0]) die "Couldn't open the file!";
open(OUT, ">".$ARGV[1]);
while (
tr/a-z/A-Z/;
s/\&/AND/;
print OUT;
}
close (IN);
close (OUT);
Daha sonra aşağıdaki programı kullanarak bir dosyada satır satır yazılı şirket adlarını sözlüğe yerleştirecek PL/SQL komutcuk dizisini oluşturdum.
#!/usr/bin/perl -w
open(IN,$ARGV[0]) die("Cannot open the input file!");
open(OUT, ">".$ARGV[1]) die("Cannot open the output file!");
print OUT "begin\n";
while (defined($line=
chomp($line);
print OUT "ctx_thes.create_relation('nstc','MANUFACTURERS AND SUPPLIERS','NTI','".$line."');\n" ;
}
print OUT "end;\n/\n";
Sonrada PL/SQL de bu dosyayı yürüttüm. E direk PL/SQL'de de yazabilirdim ama amaç biraz Perl tecrübesi. Larry Wall tarafından tasarlanan Perl'ün, web üstündeki içeriğin %85'inin arkasındaki CGI programlama(script) dili olduğu tahmin ediliyormuş. [Bkz.]
Kaçış karakteri
Daha önce sqlplus ile ilgili şu yazıda & işaretini çok güzeş bir özellike olarak sunmuştum. Gel gör ki bu karakteri içeren bir kelime dizisi ararsam ne olacak diye sormamıştım. Evet diyelim ki metin kümenizde "MATERIALS & ELECTROCHEMICAL RESEARCH (MER) CORP. " kelime dizisi aramak icap etti ne yapacaksınız? Bu durumda sqlplus'ta
SET ESCAPE \
SELECT NAME FROM DOC_TABLE WHERE CONTAINS(TEXT,'{MATERIALS \& ELECTROCHEMICAL RESEARCH (MER) CORP.}')>0;
komutunu kullanmanız gerekiyor duyurulur.
SET ESCAPE \
SELECT NAME FROM DOC_TABLE WHERE CONTAINS(TEXT,'{MATERIALS \& ELECTROCHEMICAL RESEARCH (MER) CORP.}')>0;
komutunu kullanmanız gerekiyor duyurulur.
ABOUT sorgulamaları için
ABOUT sorgulaması yapabilmek için ilk önce özelleştirdiğiniz sözlüğünüzü Oracle bilgi tabanına eklemeniz gerekiyor. Ancak bunu yapmadan önce Oracle'ın sözlük üzerine koşullarını iyi gözden geçirin. Bu koşullar önem sırasına göre şu şekilde:
- Sözlük büyük küçük harf ayrımı yapmalı. Bu nedenle sözlüğü derlerken ctxload komutunda -thescase Y seçimini ihmal etmeyin.
- En uzun kelime 80 karakter olabilir.
- BTG ve BTP BT ile NTG ve NTP ise NT ile tamamen eş görülüyor.
- BT ve NT arasında çevrimler yasak. Zaten akla yatkın olanı da bu.
- Eğer eşanlamlı kelimeler halkası varsa muhakkak birini PT yani tercih edilen kelime olarak seçin ve bütün NT, BT ilişkilerini bunun üzerinden yapın.
- RT ile ilişkilendirdiğiiz kelimeleri asla NT veya BT ilişkisine ya da tersine BT veya NT ilişkisindeki bir kelimeyi ayrıca RT olarak tanımlamayın.
- Bir kelime için en fazla 32 RT ilişkisi kurulabilir.
- En derin ağaç 16 yükseklikte olabilir.
Çarşamba, Mart 23, 2005
Sözlük kullanımındaki kısıtlar
Kelime arama ile ilgili sorgulamalarda, daha çok ilgili kayıt getirmek için sorgu genişletilmesi yapılır. Örneğin, A terimini aradığınızda bu terimin alt sınıflarını da araştırmak için NT(A) genişletmesi yapılır. Diyelim ki B, A' nin bir alt sınıfı, C ve D, B'nin eşanlamlıları(SYN) ve E, F B ile ilgili terimler(RT) olsun. Burada dikkat edilmesi gereken NT(A)'nın sadece {A} {B} yi vereceğidir.
Salı, Mart 01, 2005
Oracle 10g de eğiticisiz sınıflandırma
Evet aşağıdaki kodun 9i da çalıştırmaya kalkmayın. Çünkü çalışmaz. 10g ile yeni gelen paket kullanılıyor.
set serverout on
/* Dökümanlarınızı içeren tabloyu oluşturun ve doldurun */
/* İndeksinizi yaratın */
create index collectionx on collection(text) indextype is ctxsys.context parameters('nopopulate');
create table clusters (
clusterid NUMBER,
descript varchar2(4000),
label varchar2(200),
sze number,
quality_score number,
parent number);
/* set the preference */
exec ctx_ddl.drop_preference('my_cluster');
exec ctx_ddl.create_preference('my_cluster','KMEAN_CLUSTERING');
exec ctx_ddl.set_attribute('my_cluster','CLUSTER_NUM','3');
/* do the clustering */
exec ctx_output.start_log('my_log');
exec ctx_cls.clustering('temp_text_idx','id','restab','clusters','my_cluster');
exec ctx_output.end_log;
set serverout on
/* Dökümanlarınızı içeren tabloyu oluşturun ve doldurun */
/* İndeksinizi yaratın */
create index collectionx on collection(text) indextype is ctxsys.context parameters('nopopulate');
create table clusters (
clusterid NUMBER,
descript varchar2(4000),
label varchar2(200),
sze number,
quality_score number,
parent number);
/* set the preference */
exec ctx_ddl.drop_preference('my_cluster');
exec ctx_ddl.create_preference('my_cluster','KMEAN_CLUSTERING');
exec ctx_ddl.set_attribute('my_cluster','CLUSTER_NUM','3');
/* do the clustering */
exec ctx_output.start_log('my_log');
exec ctx_cls.clustering('temp_text_idx','id','restab','clusters','my_cluster');
exec ctx_output.end_log;
token_info
Sonunda bir kelimenin hangi dökümanın neresinde bulunduğunu gösteren fonksiyonu buldum. Kendim uğraşsam yazmaya bu kadar zaman almazdı belki ya buna da şükür.
select ctx_report.token_info('temp_text_idx','engineering',0) from dual;
Örnek çıktıdan bir parça:
CTX_REPORT.TOKEN_INFO('TEMP_TEXT_IDX','ENGINEERING',0)
-----------------------------------------------------========================================================
TOKEN INFO FOR ENGINEERING (0:TEXT)
========================================================
index: "NSTC"."TEMP_TEXT_IDX"
base table: "NSTC"."DOC_TABLE"
$I table: "NSTC"."DR$TEMP_TEXT_IDX$I"
-----------------------------------------------------
ROW 1 ($I ROWID AAAKp/AAJAACCmYAAR)
-----------------------------------------------------
DOCID COUNT: 20 FIRST: 1 LAST: 67
DOCID: 1 (AAAKp1AAJAABDRIAAP) BYTE: 1 LENGTH: 4 FREQ: 2
AT POSITIONS: 52 156
DOCID: 3 (AAAKp1AAJAABDRGAAB) BYTE: 5 LENGTH: 4 FREQ: 1
AT POSITIONS: 156
TOKEN STATISTICS
========================================================
Total $I rows: 1
Total docids: 20
Total occurrences: 48
Total token_info size: 106
Total garbage size: 0 (0%)
Optimal $I rows: 1
Row fragmentation: 0%
Aynı işlemi bir program içinde de yapabilmenizi sağlayan procedure var. Parametrelerden 0 TOKEN_TYPE_TEXT sabit değerine karşılık geliyor ki sıradan bir kelimeyi temsil ediyor. Diğer sabitler için Oracle Text Reference içinde TOKEN_TYPE kısmına bak.
select ctx_report.token_info('temp_text_idx','engineering',0) from dual;
Örnek çıktıdan bir parça:
CTX_REPORT.TOKEN_INFO('TEMP_TEXT_IDX','ENGINEERING',0)
-----------------------------------------------------========================================================
TOKEN INFO FOR ENGINEERING (0:TEXT)
========================================================
index: "NSTC"."TEMP_TEXT_IDX"
base table: "NSTC"."DOC_TABLE"
$I table: "NSTC"."DR$TEMP_TEXT_IDX$I"
-----------------------------------------------------
ROW 1 ($I ROWID AAAKp/AAJAACCmYAAR)
-----------------------------------------------------
DOCID COUNT: 20 FIRST: 1 LAST: 67
DOCID: 1 (AAAKp1AAJAABDRIAAP) BYTE: 1 LENGTH: 4 FREQ: 2
AT POSITIONS: 52 156
DOCID: 3 (AAAKp1AAJAABDRGAAB) BYTE: 5 LENGTH: 4 FREQ: 1
AT POSITIONS: 156
TOKEN STATISTICS
========================================================
Total $I rows: 1
Total docids: 20
Total occurrences: 48
Total token_info size: 106
Total garbage size: 0 (0%)
Optimal $I rows: 1
Row fragmentation: 0%
Aynı işlemi bir program içinde de yapabilmenizi sağlayan procedure var. Parametrelerden 0 TOKEN_TYPE_TEXT sabit değerine karşılık geliyor ki sıradan bir kelimeyi temsil ediyor. Diğer sabitler için Oracle Text Reference içinde TOKEN_TYPE kısmına bak.
Pazartesi, Şubat 28, 2005
Daha özel kelimeler
Burada bir kelimeden daha dar anlamlı kelimeleri nasıl bulacağımız görülüyor. Bu fonksiyonda eğer sözlük belirtirseniz derinlik bilgisi de vermeniz gerekiyor. Fonksiyonun çıktısı contains sorgulamasında kullanılmaya müsait.
set serveroutput on
declare
note varchar2(200);
begin
note := ctx_thes.nt('ship',3,'nstc');
dbms_output.put_line('Narrower Terms of SHIP');
dbms_output.put_line(note);
end;
NSTC sözlüğümüze göre çıktımız:
{SHIP}{GREASE PAINT}{UNDERWATER ANTIFOULING COATING}{BALLASTTANK}{BILGES}{COMPENSATING FUEL TANK}{SHIP BUILDINGSTANDARDS}{SUPERSTRUCTURE}{WELL DECK OVERHEAD}
Pek iyi bir sözlük hazırlamadıkları aşikâr.
set serveroutput on
declare
note varchar2(200);
begin
note := ctx_thes.nt('ship',3,'nstc');
dbms_output.put_line('Narrower Terms of SHIP');
dbms_output.put_line(note);
end;
NSTC sözlüğümüze göre çıktımız:
{SHIP}{GREASE PAINT}{UNDERWATER ANTIFOULING COATING}{BALLASTTANK}{BILGES}{COMPENSATING FUEL TANK}{SHIP BUILDINGSTANDARDS}{SUPERSTRUCTURE}{WELL DECK OVERHEAD}
Pek iyi bir sözlük hazırlamadıkları aşikâr.
Sözlükteki not
Bir kelimenin sözlükteki açıklamasını elde etmek için:
set serveroutput on
declare
note varchar2(200);
begin
note := ctx_thes.sn('ship','nstc');
dbms_output.put_line('SHIP');
dbms_output.put_line(' SN ' note);
end;
Sözlüğümüzde ne yazıyormuş bakalım.
SHIP
SN A waterborne vehicle large in size for deep-water navigation designed fortransporting passengers or freight.
Burada note değişkeninin boyutunda dikkatli olunması gerekiyor. Yeterince büyük seçilmezse şu hatayı veriyor:
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 4
set serveroutput on
declare
note varchar2(200);
begin
note := ctx_thes.sn('ship','nstc');
dbms_output.put_line('SHIP');
dbms_output.put_line(' SN ' note);
end;
Sözlüğümüzde ne yazıyormuş bakalım.
SHIP
SN A waterborne vehicle large in size for deep-water navigation designed fortransporting passengers or freight.
Burada note değişkeninin boyutunda dikkatli olunması gerekiyor. Yeterince büyük seçilmezse şu hatayı veriyor:
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 4
Fuzzy arama
Fuzzy arama yapmak isterseniz:
select score(1) as score, id,name from doc_table where contains(text,'fuzzy(material,60,10,weight)' ,1)>0;
select score(1) as score, id,name from doc_table where contains(text,'fuzzy(material,60,10,weight)' ,1)>0;
browse_words
Bir kelimenin indekslendiği yerin civarındaki kelimeleri bulmak için:
set serveroutput on;
declare
resarr ctx_query.browse_tab;
begin
ctx_query.browse_words('temp_text_idx','material',resarr,5, CTX_QUERY.BROWSE_AROUND);
for i in 1..resarr.count loop
dbms_output.put_line(resarr(i).word ':' resarr(i).doc_count);
end loop;
end;
Aynı sonuçları tabloya almak için önceden bir tablo yaratmanız gerekiyor.
create table restab (browse_id number, word varchar2(64), doc_count number);
begin
ctx_query.browse_words('myindex','material','restab',numwords=>6, direction=>'AROUND');
end;
select word, doc_count from restab order by word;
Elimizdeki sonuç:
MATE:1
MATERI:1
MATERIAL:26
MATERIALEASE:1
MATERIALS:38
MATERIEL:1
Yön olarak CTX_QUERY.BROWSE_BEFORE, CTX_QUERY.BROWSE_AROUND, ve CTX_QUERY.BROWSE_AFTER kullanılabilir.
set serveroutput on;
declare
resarr ctx_query.browse_tab;
begin
ctx_query.browse_words('temp_text_idx','material',resarr,5, CTX_QUERY.BROWSE_AROUND);
for i in 1..resarr.count loop
dbms_output.put_line(resarr(i).word ':' resarr(i).doc_count);
end loop;
end;
Aynı sonuçları tabloya almak için önceden bir tablo yaratmanız gerekiyor.
create table restab (browse_id number, word varchar2(64), doc_count number);
begin
ctx_query.browse_words('myindex','material','restab',numwords=>6, direction=>'AROUND');
end;
select word, doc_count from restab order by word;
Elimizdeki sonuç:
MATE:1
MATERI:1
MATERIAL:26
MATERIALEASE:1
MATERIALS:38
MATERIEL:1
Yön olarak CTX_QUERY.BROWSE_BEFORE, CTX_QUERY.BROWSE_AROUND, ve CTX_QUERY.BROWSE_AFTER kullanılabilir.
ctx_doc.theme
Bir dokümanın, sistem bilgi dağarcığına göre ana temalarının neler olduğunu görmek istiyorsanız:
create table the_themes (query_id number, theme varchar2(2000), weight number);
begin ctx_doc.set_key_type('ROWID');
ctx_doc.themes(index_name=> 'TEMP_TEXT_IDX',
textkey=>'AAAKp1AAJAABDRIAAO',
restab=>'the_themes');
end;
/
select theme,weight from the_themes order by weight desc;
drop table the_themes;
Bu da PL/SQL de hem bellekte yaratılan tabloyu kullanarak, hem de bütün bir tema ağacını göstermek için gerekli kod:
declare the_themes ctx_doc.theme_tab;
begin ctx_doc.set_key_type('ROWID');
ctx_doc.themes(index_name=> 'temp_text_idx',
textkey=>'AAAKp1AAJAABDRIAAO',
restab=>the_themes,
full_themes=>TRUE,
num_themes=>150);
for i in 1..the_themes.count loop
dbms_output.put_line(the_themes(i).theme':'the_themes(i).weight);
end loop;
end;
create table the_themes (query_id number, theme varchar2(2000), weight number);
begin ctx_doc.set_key_type('ROWID');
ctx_doc.themes(index_name=> 'TEMP_TEXT_IDX',
textkey=>'AAAKp1AAJAABDRIAAO',
restab=>'the_themes');
end;
/
select theme,weight from the_themes order by weight desc;
drop table the_themes;
Bu da PL/SQL de hem bellekte yaratılan tabloyu kullanarak, hem de bütün bir tema ağacını göstermek için gerekli kod:
declare the_themes ctx_doc.theme_tab;
begin ctx_doc.set_key_type('ROWID');
ctx_doc.themes(index_name=> 'temp_text_idx',
textkey=>'AAAKp1AAJAABDRIAAO',
restab=>the_themes,
full_themes=>TRUE,
num_themes=>150);
for i in 1..the_themes.count loop
dbms_output.put_line(the_themes(i).theme':'the_themes(i).weight);
end loop;
end;
ctx_doc.tokens
İndekslenen kelimeleri elde etmenin bir yolu:
show user
set serveroutput on size 1000000
--Yukarıdakı satır dbms tampon
--alan boyutunu arttırmak için
declare
spool theme
the_tokens ctx_doc.token_tab;
begin
--PRIMARY_KEY ya da ROWID tanımlanabilir.
ctx_doc.set_key_type('ROWID');
ctx_doc.tokens('temp_text_idx','1',the_tokens);
--Yukarıdakı 1 rakamı yerine rowid girmek gerekiyor
--Örneğin AAAKp1AAJAABDRIAAO
for i in 1..the_tokens.count loop
dbms_output.put_line(the_tokens(i).token);
end loop;
end;
/
spool off
Bu fonksiyon dokümanları sınıflandırma gibi çalışmalarda oldukça faydalı.
show user
set serveroutput on size 1000000
--Yukarıdakı satır dbms tampon
--alan boyutunu arttırmak için
declare
spool theme
the_tokens ctx_doc.token_tab;
begin
--PRIMARY_KEY ya da ROWID tanımlanabilir.
ctx_doc.set_key_type('ROWID');
ctx_doc.tokens('temp_text_idx','1',the_tokens);
--Yukarıdakı 1 rakamı yerine rowid girmek gerekiyor
--Örneğin AAAKp1AAJAABDRIAAO
for i in 1..the_tokens.count loop
dbms_output.put_line(the_tokens(i).token);
end loop;
end;
/
spool off
Bu fonksiyon dokümanları sınıflandırma gibi çalışmalarda oldukça faydalı.
Cuma, Şubat 25, 2005
Plustrace kurulumu
SQL komutlarının yürütülmesini izlemek için sistem yöneticisinin (dbadm rolündeki) ilk önce PLUSTRACE rolünü oluşturması gerekiyor.
sqlplus /nolog
connect / as sysdba
@$ORACLE_HOME\sqlplus\admin\plustrce.sql
İlk hatayı ihmal edebilirsin zira olmaya rolü düşürmeye çalıştığından dolayı veriliyor.
Daha sonra örneğin HR kullanıcısına bu rolü vermek için:
grant plustrace to HR;
HR kullanıcısının ilk olarak kendi hesabına girerek
@$ORACLE_HOME\RDBMS\ADMIN\utlxplan.sql
komutunu çalıştırması gerekiyor.
Bundan sonra hem sonucu hem de komutların yürütülmesini izlemek için örneğin
set autotrace on explain
select score(1),id, name from doc_table -
where contains(text,'{corrosion}',1)>0;
Benim örneğimde sonuç şu şekilde:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=0 Card=1 Bytes=227 4)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'DOC_TABLE' (TABLE) (Cost =0 Card=1 Bytes=2274)
2 1 DOMAIN INDEX OF 'TEXT_IDX' (INDEX (DOMAIN)) (Cost=0)
sqlplus /nolog
connect / as sysdba
@$ORACLE_HOME\sqlplus\admin\plustrce.sql
İlk hatayı ihmal edebilirsin zira olmaya rolü düşürmeye çalıştığından dolayı veriliyor.
Daha sonra örneğin HR kullanıcısına bu rolü vermek için:
grant plustrace to HR;
HR kullanıcısının ilk olarak kendi hesabına girerek
@$ORACLE_HOME\RDBMS\ADMIN\utlxplan.sql
komutunu çalıştırması gerekiyor.
Bundan sonra hem sonucu hem de komutların yürütülmesini izlemek için örneğin
set autotrace on explain
select score(1),id, name from doc_table -
where contains(text,'{corrosion}',1)>0;
Benim örneğimde sonuç şu şekilde:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=0 Card=1 Bytes=227 4)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'DOC_TABLE' (TABLE) (Cost =0 Card=1 Bytes=2274)
2 1 DOMAIN INDEX OF 'TEXT_IDX' (INDEX (DOMAIN)) (Cost=0)
Değişken kullanımı
Aşağıdaki komutları prompt adında bir dosyaya kaydet. SqlPlus'ta START prompt diyere çalıştır.
PROMPT The screen will be cleaned
PAUSE Press RETURN to continue
clear screen
PROMPT Example of a bind variable
VARIABLE ret_val NUMBER
exec :ret_val := 4;
PRINT ret_val
PROMPT The screen will be cleaned
PAUSE Press RETURN to continue
clear screen
PROMPT Example of a bind variable
VARIABLE ret_val NUMBER
exec :ret_val := 4;
PRINT ret_val
SqlPlus'ın güzellikleri
select name from doc_table where contains(text,'{&keyword}')>0;
save contains
get contains
start contains
keyword bir parametre olduğundan bir uyarı gelecek ve istediğiniz kelimeyi aratabileceksiniz. Komutu contains.sql adlı dosyaya kaydetmiş durumdasın. Tekrar düzenlemek için :
edit contains
Sistemde DEFINE keyword=seawater diyerek bir daha dene ve gör.
İşlem yaptırmak için:
select 200-100 from dual;
Dikkat et eğer - satır sonunda kalırsa SqlPlus onu komutun devam ettiği gösteren işaret olarak algılar.
save contains
get contains
start contains
keyword bir parametre olduğundan bir uyarı gelecek ve istediğiniz kelimeyi aratabileceksiniz. Komutu contains.sql adlı dosyaya kaydetmiş durumdasın. Tekrar düzenlemek için :
edit contains
Sistemde DEFINE keyword=seawater diyerek bir daha dene ve gör.
İşlem yaptırmak için:
select 200-100 from dual;
Dikkat et eğer - satır sonunda kalırsa SqlPlus onu komutun devam ettiği gösteren işaret olarak algılar.
Perşembe, Şubat 24, 2005
Text komut çözücü hatası
Aşağıdaki komutun sonucu maalesef hata veriyor.
SQL> select name from doc_table where contains(text,'tr') > 0;
select name from doc_table where contains(text,'tr') > 0*
ERROR at line 1:
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-50901: text query parser syntax error on line 1, column 3
Çözüm olarak şunu kullan:
SQL> select name from doc_table where contains(text,'{tr}') > 0;
SQL> select name from doc_table where contains(text,'tr') > 0;
select name from doc_table where contains(text,'tr') > 0*
ERROR at line 1:
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-50901: text query parser syntax error on line 1, column 3
Çözüm olarak şunu kullan:
SQL> select name from doc_table where contains(text,'{tr}') > 0;
İndeksi açıklat
SQL*Plus'ta ctx_report aracını kullanarak indeksi açıklatabilirsin. İndeksin tüm parametrelerini açıkca görebilirsin.
set long 64000
set pages 0
set heading off
set feedback off
spool outputfile
select ctx_report.describe_index('text_idx') from dual;
spool off
set long 64000
set pages 0
set heading off
set feedback off
spool outputfile
select ctx_report.describe_index('text_idx') from dual;
spool off
ctx_thes'a örnek
set serveroutput on
declare terms varchar2(2000);
begin
terms:=ctx_thes.bt('future',2,'default');
dbms_output.put_line('The broader' terms);
end;
/
declare terms varchar2(2000);
begin
terms:=ctx_thes.bt('future',2,'default');
dbms_output.put_line('The broader' terms);
end;
/
ctxhx'in yeri
RedHat üzerinde yüklenmiş Oracle9i'deki ctxhx bazı pdfleri ne yazıkki çeviremiyor. Bu nedenle yaptığımız filtrelemede her nekadar ilgili dökümanlar olsa da indekslenemediği için contains ile yapılan aramalarda listelenmiyor. WindowsXP üzerine Oracle10g'yi kurdum. Onunla oynuyorum biraz. ctxhx'in yeri $ORACLE_HOME/BIN in altında.
Salı, Şubat 15, 2005
Yeni bir dergi tabi benim için :)
Data-mining algorithms in Oracle9i and Microsoft SQL Server
Margo Hanna. Campus - Wide Information Systems. Bradford: 2004. Vol. 21, Iss. 3; p. 132
Margo Hanna. Campus - Wide Information Systems. Bradford: 2004. Vol. 21, Iss. 3; p. 132
Web verisinin analizi ve ahlakî sorunlar...
Ethical issues in web data mining
Lita van Wel, Lambèr Royakkers. Ethics and Information Technology. Dordrecht: 2004. Vol. 6, Iss. 2; p. 129
Lita van Wel, Lambèr Royakkers. Ethics and Information Technology. Dordrecht: 2004. Vol. 6, Iss. 2; p. 129
Yönetim ağırlıklı dergide bir bilgisayar konusu
Jacek Blazewicz, Erwin Pesch and Malgorzata Sterna, A novel representation of graph structures in web mining and data analysis, Omega, Volume 33, Issue 1, February 2005, Pages 65-71.(http://www.sciencedirect.com/science/article/B6VC4-4CG0P3G-1/2/a2bcab17def59295cbd3b85d7bd73b51)
Cuma, Şubat 11, 2005
Index yarat..
Yarattığın "stoplist"i kullanarak index oluştur.
CREATE INDEX BACKLINKURL_IDX ON LINK_TABLE(NAME)
INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('STOPLIST WEBSTOP');
ALTER INDEX BACKLINKURL_IDX REBUILD;
CREATE INDEX BACKLINKURL_IDX ON LINK_TABLE(NAME)
INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('STOPLIST WEBSTOP');
ALTER INDEX BACKLINKURL_IDX REBUILD;
Stoplist/Stopclass ekle
exec ctx_ddl.create_stoplist('webstop','BASIC_STOPLIST');
exec ctx_ddl.add_stopword('webstop','index');
exec ctx_ddl.add_stopword('webstop','http');
exec ctx_ddl.add_stopword('webstop','asp');
exec ctx_ddl.add_stopword('webstop','aspx');
exec ctx_ddl.add_stopword('webstop','cgi');
exec ctx_ddl.add_stopword('webstop','php');
exec ctx_ddl.add_stopword('webstop','shtml');
exec ctx_ddl.add_stopword('webstop','html');
exec ctx_ddl.add_stopword('webstop','htm');
exec ctx_ddl.add_stopword('webstop','dtl');
exec ctx_ddl.add_stopword('webstop','www');
exec ctx_ddl.add_stopword('webstop','w3c');
exec ctx_ddl.add_stopword('webstop','webmaster');
exec ctx_ddl.add_stopword('webstop','jsp');
exec ctx_ddl.add_stopword('webstop','id');
exec ctx_ddl.add_stopword('webstop','ind');
exec ctx_ddl.add_stopword('webstop','sid');
--exec ctx_ddl.add_stopword('webstop','au');
exec ctx_ddl.add_stopclass('webstop','NUMBERS');
exec ctx_ddl.add_stopword('webstop','index');
exec ctx_ddl.add_stopword('webstop','http');
exec ctx_ddl.add_stopword('webstop','asp');
exec ctx_ddl.add_stopword('webstop','aspx');
exec ctx_ddl.add_stopword('webstop','cgi');
exec ctx_ddl.add_stopword('webstop','php');
exec ctx_ddl.add_stopword('webstop','shtml');
exec ctx_ddl.add_stopword('webstop','html');
exec ctx_ddl.add_stopword('webstop','htm');
exec ctx_ddl.add_stopword('webstop','dtl');
exec ctx_ddl.add_stopword('webstop','www');
exec ctx_ddl.add_stopword('webstop','w3c');
exec ctx_ddl.add_stopword('webstop','webmaster');
exec ctx_ddl.add_stopword('webstop','jsp');
exec ctx_ddl.add_stopword('webstop','id');
exec ctx_ddl.add_stopword('webstop','ind');
exec ctx_ddl.add_stopword('webstop','sid');
--exec ctx_ddl.add_stopword('webstop','au');
exec ctx_ddl.add_stopclass('webstop','NUMBERS');
Kısıt ekle..
Gelen bağlantı tablosuna "id" ve "name" alanları için belirleyici alan "primary key" kısıtı koy. Bknz.
ALTER TABLE LINK_TABLE
ADD CONSTRAINT PK
PRIMARY KEY (ID, NAME)
ALTER TABLE LINK_TABLE
ADD CONSTRAINT PK
PRIMARY KEY (ID, NAME)
Link tablosunu yedekle.
Bağlantı tablosunu şu şekilde yedekleyebilirsin:
CREATE TABLE LINK AS
SELECT * FROM LINK_TABLE;
CREATE TABLE LINK AS
SELECT * FROM LINK_TABLE;
Kaydol:
Kayıtlar (Atom)