--type用法 /** 多行多列--動(dòng)態(tài)游標(biāo)(ref cursor) 多行單列--表(table) 單行多列--記錄(record) 自定義類型--對(duì)象(object) %rowtype -->與某一行的數(shù)據(jù)類型一致 %type -->與某個(gè)字段的數(shù)據(jù)類型一致 **/
--創(chuàng)建數(shù)據(jù)鏈 連接不同oracle實(shí)例
--創(chuàng)建同義詞 同義詞在一個(gè)數(shù)據(jù)庫(kù)中不同用戶之間可以共享數(shù)據(jù)庫(kù)對(duì)象 --PUBLIC 公有同義詞可被數(shù)據(jù)庫(kù)中所有用戶使用 --私有的同義詞只能被當(dāng)前的用戶使用
測(cè)試code
--oracle之type、database_link、synonym --創(chuàng)建測(cè)試數(shù)據(jù) CREATE TABLE test_TABLES AS SELECT * from USER_TABLES; SELECT * from test_TABLES TT; --type用法 /** 多行多列--動(dòng)態(tài)游標(biāo)(ref cursor) 多行單列--表(table) 單行多列--記錄(record) 自定義類型--對(duì)象(object) %rowtype -->與某一行的數(shù)據(jù)類型一致 %type -->與某個(gè)字段的數(shù)據(jù)類型一致 **/ --游標(biāo) 多行多列 --CURSOR CREATE OR REPLACE PROCEDURE PRO_REF_CUR_TEST AS --定義動(dòng)態(tài)游標(biāo)數(shù)據(jù)類型 TYPE CUSTOM_CURSOR IS REF CURSOR; --1、定義游標(biāo)變量 test_CUSTOM_CURSOR CUSTOM_CURSOR; REC test_TABLES%ROWTYPE; BEGIN --2、打開游標(biāo) OPEN test_CUSTOM_CURSOR FOR SELECT * FROM test_TABLES; LOOP --3、獲取值 FETCH test_CUSTOM_CURSOR INTO REC; --4、退出 EXIT WHEN test_CUSTOM_CURSOR%NOTFOUND; DBMS_OUTPUT.PUT_LINE(REC.TABLE_NAME || ' ' || REC.TABLESPACE_NAME || ' ' || TO_CHAR(REC.LAST_ANALYZED, 'yyyy-mm-dd')); END LOOP; --5、關(guān)閉 CLOSE test_CUSTOM_CURSOR; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM); END PRO_REF_CUR_TEST; --TABLE 多行單列 CREATE OR REPLACE PROCEDURE PRO_table_TEST AS --定義表 類似于數(shù)組的使用 每一個(gè)元素?cái)?shù)據(jù)類型為VARCHAR2(20) 索引值為BINARY_INTEGER TYPE CUSTOM_TABLE IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER; test_CUSTOM_TABLE CUSTOM_TABLE; BEGIN --索引值只要為BINARY_INTEGER即可 test_CUSTOM_TABLE(1) := '劉德華'; test_CUSTOM_TABLE(4) := '張學(xué)友'; test_CUSTOM_TABLE(-20) := '郭富城'; test_CUSTOM_TABLE(-10) := '郭富城'; DBMS_OUTPUT.PUT_LINE(test_CUSTOM_TABLE(1) || ' ' || test_CUSTOM_TABLE(4)); DBMS_OUTPUT.PUT_LINE('按照索引值進(jìn)行排序'); --table中的函數(shù) DBMS_OUTPUT.PUT_LINE(test_CUSTOM_TABLE.FIRST || ' ' || test_CUSTOM_TABLE.NEXT(test_CUSTOM_TABLE.FIRST) || ' ' || test_CUSTOM_TABLE.PRIOR(test_CUSTOM_TABLE.LAST) || ' ' || test_CUSTOM_TABLE.LAST); DBMS_OUTPUT.PUT_LINE('總數(shù):' || test_CUSTOM_TABLE.COUNT); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM); END PRO_table_TEST; --記錄 --RECORD 單行多列 CREATE OR REPLACE PROCEDURE PRO_Record_TEST AS --定義一行記錄 TYPE CUSTOM_RECORD IS RECORD(TABLE_NAME TEST_TABLEs.Table_Name%TYPE, TABLESPACE_NAME Test_Tables.Tablespace_Name%TYPE, LAST_ANALYZED Test_Tables.Last_Analyzed%TYPE); --定義記錄變量 test_CUSTOM_RECORD CUSTOM_RECORD; BEGIN SELECT TABLE_NAME, TABLESPACE_NAME, LAST_ANALYZED INTO test_CUSTOM_RECORD FROM test_TABLES WHERE TABLE_NAME = 'TEST_TABLE'; DBMS_OUTPUT.PUT_LINE(test_CUSTOM_RECORD.TABLE_NAME || ' ' || test_CUSTOM_RECORD.TABLESPACE_NAME || ' ' || TO_CHAR(test_CUSTOM_RECORD.LAST_ANALYZED, 'yyyy-mm-dd')); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM); END PRO_Record_TEST; --創(chuàng)建自定義類型 CREATE TYPE CUSTOM_OBJECT AS OBJECT(AGE INT, NAME VARCHAR2(20)); CREATE TABLE CUSTOM_TABLE(TABLE_NAME INT, OTHER CUSTOM_OBJECT); INSERT INTO CUSTOM_TABLE VALUES (1, CUSTOM_OBJECT(2, 'hello')); SELECT * FROM CUSTOM_TABLE; --創(chuàng)建數(shù)據(jù)鏈 連接不同oracle實(shí)例 --查看實(shí)例名 SELECT * from GLOBAL_NAME; --創(chuàng)建數(shù)據(jù)鏈 CREATE DATABASE LINK u_other CONNECT TO u2 IDENTIFIED BY u2 USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (service_name=ORCL) ) )'; --查詢數(shù)據(jù)鏈接 SELECT * from dba_db_links dd WHERE dd.DB_LINK='U_OTHER'; DROP DATABASE LINK u_other; SELECT * from user_tables@u_other; --創(chuàng)建同義詞 同義詞在一個(gè)數(shù)據(jù)庫(kù)中不同用戶之間可以共享數(shù)據(jù)庫(kù)對(duì)象 --PUBLIC 公有同義詞可被數(shù)據(jù)庫(kù)中所有用戶使用 --私有的同義詞只能被當(dāng)前的用戶使用 CREATE PUBLIC SYNONYM ut FOR u2.user_tables; DROP PUBLIC SYNONYM ut; SELECT * from ut; --查詢同義詞 SELECT * from Dba_Synonyms ds WHERE ds.synonym_name='UT';
測(cè)試結(jié)果
1、測(cè)試游標(biāo)
begin -- Call the procedure pro_ref_cur_test; end;
PLAN_TABLE UNDER 2014-10-29 EMPLOYEE UNDER 2014-09-18 CREATE$JAVA$LOB$TABLE UNDER 2014-09-17 IDCARD_INFO UNDER 2014-11-12 PERSON_INFO UNDER 2014-11-12 CUSTOM_TABLE UNDER 2014-12-24 PC_CHECK_DETAIL 2014-09-06 STUDENT UNDER 2014-10-29 TEST_TABLE UNDER 2014-09-21
2、測(cè)試表
begin -- Call the procedure pro_table_test; end;
劉德華 張學(xué)友 按照索引值進(jìn)行排序 -20 -10 1 4 總數(shù):4
3、測(cè)試記錄
begin -- Call the procedure pro_record_test; end;
TEST_TABLE UNDER 2014-09-21
4、自定義類型
--創(chuàng)建自定義類型 CREATE TYPE CUSTOM_OBJECT AS OBJECT(AGE INT, NAME VARCHAR2(20)); CREATE TABLE CUSTOM_TABLE(TABLE_NAME INT, OTHER CUSTOM_OBJECT); INSERT INTO CUSTOM_TABLE VALUES (1, CUSTOM_OBJECT(2, 'hello')); SELECT * FROM CUSTOM_TABLE;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
