




免費(fèi)預(yù)覽已結(jié)束,剩余16頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(1)SEQNAME.NEXTVAL里面的值如何讀出來?可以直接在insert into test values(SEQNAME.NEXTVAL) 是可以用 這樣: SELECT tmp#_seq.NEXTVAL INTO id_temp FROM DUAL; 然后可以用id_temp(2)PLS-00103: 出現(xiàn)符號(hào) 在需要下列之一時(shí):代碼如下: IF (sum0) THEN begin INSERT INTO emesp.tp_sn_production_log VALUES (r_serial_number, , id_temp); EXIT; end; 一直報(bào)sum0 這是個(gè)很郁悶的問題 因?yàn)樽兞坑昧藄um 所以不行,后改為i_sum0(3)oracle 語法1. Oracle應(yīng)用編輯方法概覽答:1) Pro*C/C+/. : C語言和數(shù)據(jù)庫打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C語言和數(shù)據(jù)庫打交道的方法,和ProC很相似,更底層,很少用; 4) SQLJ: 很新的一種用Java訪問Oracle數(shù)據(jù)庫的方法,會(huì)的人不多; 5) JDBC 6) PL/SQL: 存儲(chǔ)在數(shù)據(jù)內(nèi)運(yùn)行, 其他方法為在數(shù)據(jù)庫外對(duì)數(shù)據(jù)庫訪問;2. PL/SQL答:1) PL/SQL(Procedual language/SQL)是在標(biāo)準(zhǔn)SQL的基礎(chǔ)上增加了過程化處理的語言; 2) Oracle客戶端工具訪問Oracle服務(wù)器的操作語言; 3) Oracle對(duì)SQL的擴(kuò)充;4. PL/SQL的優(yōu)缺點(diǎn)答:優(yōu)點(diǎn): 1) 結(jié)構(gòu)化模塊化編程,不是面向?qū)ο? 2) 良好的可移植性(不管Oracle運(yùn)行在何種操作系統(tǒng)); 3) 良好的可維護(hù)性(編譯通過后存儲(chǔ)在數(shù)據(jù)庫里); 4) 提升系統(tǒng)性能; 第二章PL/SQL程序結(jié)構(gòu)1. PL/SQL塊答:1) 申明部分, DECLARE(不可少); 2) 執(zhí)行部分, BEGIN.END; 3) 異常處理,EXCEPTION(可以沒有);2. PL/SQL開發(fā)環(huán)境答:可以運(yùn)用任何純文本的編輯器編輯,例如:VI ;toad很好用3. PL/SQL字符集答:PL/SQL對(duì)大小寫不敏感4. 標(biāo)識(shí)符命名規(guī)則答:1) 字母開頭; 2) 后跟任意的非空格字符、數(shù)字、貨幣符號(hào)、下劃線、或# ; 3) 最大長度為30個(gè)字符(八個(gè)字符左右最合適);5. 變量聲明答:語法 Var_name type CONSTANTNOT NULL:=value; 注:1) 申明時(shí)可以有默認(rèn)值也可以沒有; 2) 如有CONSTANTNOT NULL, 變量一定要有一個(gè)初始值; 3) 賦值語句為“:=”; 4) 變量可以認(rèn)為是數(shù)據(jù)庫里一個(gè)字段; 5) 規(guī)定沒有初始化的變量為NULL;第三章1. 數(shù)據(jù)類型答:1) 標(biāo)量型:數(shù)字型、字符型、布爾型、日期型; 2) 組合型:RECORD(常用)、TABLE(常用)、VARRAY(較少用) 3) 參考型:REF CURSOR(游標(biāo))、REF object_type 4) LOB(Large Object)2. %TYPE答:變量具有與數(shù)據(jù)庫的表中某一字段相同的類型 例:v_FirstName studengts.first_name%TYPE;3. RECORD類型答:TYPE record_name IS RECORD( /*其中TYPE,IS,RECORD為關(guān)鍵字,record_name為變量名稱*/field1 type NOT NULL:=expr1, /*每個(gè)等價(jià)的成員間用逗號(hào)分隔*/field2 type NOT NULL:=expr2, /*如果一個(gè)字段限定NOT NULL,那么它必須擁有一個(gè)初始值*/ . /*所有沒有初始化的字段都會(huì)初始為NULLfieldn type NOT NULL:=exprn);4. %ROWTYPE答:返回一個(gè)基于數(shù)據(jù)庫定義的類型 DECLARE v_StuRec Student%ROWTYPE; /*Student為表的名字*/ 注:與3中定一個(gè)record相比,一步就完成,而3中定義分二步:a. 所有的成員變量都要申明; b. 實(shí)例化變量;5. TABLE類型答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER; 例:DECLARE TYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER; v_Student t_StuTable;BEGIN SELECT * INTO v_Student(100) FROM Student WHERE id = 1001; END; 注:1) 行的數(shù)目的限制由BINARY_INTEGER的范圍決定;6. 變量的作用域和可見性答:1) 執(zhí)行塊里可以嵌入執(zhí)行塊; 2) 里層執(zhí)行塊的變量對(duì)外層不可見; 3) 里層執(zhí)行塊對(duì)外層執(zhí)行塊變量的修改會(huì)影響外層塊變量的值;第四章1. 條件語句答:IF boolean_expression1 THEN . ELSIF boolean_expression2 THEN /*注意是ELSIF,而不是ELSEIF*/ . /*ELSE語句不是必須的,但END IF;是必須的*/ ELSE . END IF;2. 循環(huán)語句答:1) Loop . IF boolean_expr THEN /* */ EXIT; /* EXIT WHEN boolean_expr */ END IF; /* */ END LOOP; 2) WHILE boolean_expr LOOP . END LOOP; 3) FOR loop_counter IN REVERSE low_blound.high_bound LOOP . END LOOP; 注:a. 加上REVERSE 表示遞減,從結(jié)束邊界到起始邊界,遞減步長為一; b. low_blound 起始邊界; high_bound 結(jié)束邊界;3. GOTO語句答:GOTO label_name; 1) 只能由內(nèi)部塊跳往外部塊; 2) 設(shè)置標(biāo)簽: 3) 示例: LOOP . IF D%ROWCOUNT = 50 THEN GOTO l_close; END IF; . END LOOP; ; .4. NULL語句答:在語句塊中加空語句,用于補(bǔ)充語句的完整性。示例: IF boolean_expr THEN . ELSE NULL; END IF;5. SQL in PL/SQL答:1) 只有DML SQL可以直接在PL/SQL中使用;第五章1. 游標(biāo)(CURSOR)答:1) 作用:用于提取多行數(shù)據(jù)集; 2) 聲明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR的內(nèi)容必須是一條查詢語句*/ b. 帶參數(shù)申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id; 3) 打開游標(biāo):OPEN Cursor_name; /*相當(dāng)于執(zhí)行select語句,且把執(zhí)行結(jié)果存入CURSOR; 4) 從游標(biāo)中取數(shù):a. FETCH cursor_name INTO var1, var2, .; /*變量的數(shù)量、類型、順序要和Table中字段一致;*/ b. FETCH cursor_name INTO record_var; 注:將值從CURSOR取出放入變量中,每FETCH一次取一條記錄; 5) 關(guān)閉游標(biāo): CLOSE Cursor_name; 注:a. 游標(biāo)使用后應(yīng)該關(guān)閉; b. 關(guān)閉后的游標(biāo)不能FETCH和再次CLOSE; c. 關(guān)閉游標(biāo)相當(dāng)于將內(nèi)存中CURSOR的內(nèi)容清空;2. 游標(biāo)的屬性答:1) %FOUND: 是否有值; 2) %NOTFOUND: 是否沒有值; 3) %ISOPEN: 是否是打開狀態(tài); 4) %ROWCOUNT: CURSOR當(dāng)前的記錄號(hào);3. 游標(biāo)的FETCH循環(huán)答:1) LOOP FETCH cursor INTO . EXIT WHEN cursor%NOTFOUND; /*當(dāng)cursor中沒記錄后退出*/ END LOOP; 2) WHILE cursor%FOUND LOOP FETCH cursor INTO . END LOOP; 3) FOR var IN cursor LOOP FETCH cursor INTO. END LOOP; 第六章1. 異常答:DECLARE . e_TooManyStudents EXCEPTION; /* 申明異常 */ . BEGIN . RAISE e_TooManyStudents; /* 觸發(fā)異常 */ . EXCEPTION WHEN e_TooManyStudents THEN /* 觸發(fā)異常 */ . WHEN OTHERS THEN /* 處理所有其他異常 */ . END;2004-9-8 星期三 陰PL/SQL數(shù)據(jù)庫編程(下)1. 存儲(chǔ)過程(PROCEDURE)答:創(chuàng)建過程: CREATE OR REPLACE PROCEDURE proc_name (arg_nameIN|OUT|IN OUTTYPE, arg_nameIN|OUT|IN OUTTYPE) IS|AS procedure_body 1) IN: 表示該參數(shù)不能被賦值(只能位于等號(hào)右邊); 2) OUT:表示該參數(shù)只能被賦值(只能位于等號(hào)左邊); 3) IN OUT: 表示該類型既能被賦值也能傳值;2. 存儲(chǔ)過程例子答:CREATE OR REPLACE PROCEDURE ModeTest( p_InParm IN NUMBER, p_OutParm OUT NUMBER, p_InOutParm IN OUT NUMBER) IS v_LocalVar NUMBER; /* 聲明部分 */ BEGIN v_LocalVar:=p_InParm; /* 執(zhí)行部分 */ p_OutParm:=7; p_InOutParm:=7; . EXCEPTION . /* 異常處理部分 */ END ModeTest; 3. 調(diào)用PROCEDURE的例子答:1) 匿名塊可以調(diào); 2) 其他PROCDEURE可以調(diào)用; 例: DECLARE v_var1 NUMBER; BEGIN ModeTest(12, v_var1, 10); END; 注:此時(shí)v_var1等于74. 指定實(shí)參的模式答:1) 位置標(biāo)示法:調(diào)用時(shí)添入所有參數(shù),實(shí)參與形參按順序一一對(duì)應(yīng); 2) 名字標(biāo)示法:調(diào)用時(shí)給出形參名字,并給出實(shí)參 ModeTest(p_InParm=12, p_OutParm=v_var1, p_Inout=10); 注:a. 兩種方法可以混用; b. 混用時(shí)第一個(gè)參數(shù)必須通過位置來指定。5. 函數(shù)(Function)與過程(Procedure)的區(qū)別答:1) 過程調(diào)用本身是一個(gè)PL/SQL語句(可以在命令行中通過exec語句直接調(diào)用); 2) 函數(shù)調(diào)用是表達(dá)式的一部分;6. 函數(shù)的聲明答:CREATE OR REPLACE PROCEDURE proc_name (arg_nameIN|OUT|IN OUTTYPE, arg_nameIN|OUT|IN OUTTYPE) RETURN TYPE IS|AS procedure_body 注:1) 沒有返回語句的函數(shù)將是一個(gè)錯(cuò)誤;7. 刪除過程與函數(shù)答:DROP PROCEDURE proc_name; DROP FUNCTION func_name;第八章1. 包答:1) 包是可以將相關(guān)對(duì)象存儲(chǔ)在一起的PL/SQL的結(jié)構(gòu); 2) 包只能存儲(chǔ)在數(shù)據(jù)庫中,不能是本地的; 3) 包是一個(gè)帶有名字的聲明; 4) 相當(dāng)于一個(gè)PL/SQL塊的聲明部分; 5) 在塊的聲明部分出現(xiàn)的任何東西都能出現(xiàn)在包中; 6) 包中可以包含過程、函數(shù)、游標(biāo)與變量; 7) 可以從其他PL/SQL塊中引用包,包提供了可用于PL/SQL的全局變量。 8) 包有包頭和包主體,如包頭中沒有任何函數(shù)與過程,則包主體可以不需要。2. 包頭答:1) 包頭包含了有關(guān)包的內(nèi)容的信息,包頭不含任何過程的代碼。 2) 語法: CREATE OR REPLACE PACKAGE pack_name IS|AS procedure_specification|function_specification|variable_declaration|type_definition|exception_declaration|cursor_declaration END pack_name; 3) 示例: CREATE OR REPLACE PACKAGE pak_test AS PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE); TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER; END pak_test;3. 包主體答:1) 包主體是可選的,如包頭中沒有任何函數(shù)與過程,則包主體可以不需要。 2) 包主體與包頭存放在不同的數(shù)據(jù)字典中。 3) 如包頭編譯不成功,包主體無法正確編譯。 4) 包主體包含了所有在包頭中聲明的所有過程與函數(shù)的代碼。 5) 示例: CREATE OR REPLACE PACKAGE BODY pak_test AS PROCEDURE RemoveStudent(p_StuID IN students.id%TYPE) IS BEGIN . END RemoveStudent; TYPE t_StuIDTable IS TABLE OF students.id%TYPE INDEX BY BINARY_INTEGER; END pak_test;4. 包的作用域答:1) 在包外調(diào)用包中過程(需加包名):pak_test.AddStudent(100010, CS, 101); 2) 在包主體中可以直接使用包頭中聲明的對(duì)象和過程(不需加包名);5. 包中子程序的重載答:1) 同一個(gè)包中的過程與函數(shù)都可以重載; 2) 相同的過程或函數(shù)名字,但參數(shù)不同;6. 包的初始化答:1) 包存放在數(shù)據(jù)庫中; 2) 在第一次被調(diào)用的時(shí)候,包從數(shù)據(jù)庫中調(diào)入內(nèi)存并被初始化; 3) 包中定義的所有變量都被分配內(nèi)存; 4) 每個(gè)會(huì)話都將擁有自己的包內(nèi)變量的副本。第九章1. 觸發(fā)器答:1) 觸發(fā)器與過程/函數(shù)的相同點(diǎn) a. 都是帶有名字的執(zhí)行塊; b. 都有聲明、執(zhí)行體和異常部分; 2) 觸發(fā)器與過程/函數(shù)的不同點(diǎn) a. 觸發(fā)器必須存儲(chǔ)在數(shù)據(jù)庫中; b. 觸發(fā)器自動(dòng)執(zhí)行;2. 創(chuàng)建觸發(fā)器答:1) 語法: CREATE OR REPLACE TRIGGER trigger_name BEFORE|AFTER triggering_event ON table_reference FOR EACH ROW WHEN trigger_condition trigger_body; 2) 范例: CREATE OR REPLACE TRIGGER UpdateMajorStats AFTER INSERT OR DELETE OR UPDATE ON students DECLARE CURSOR c_Statistics IS SELECT * FROM students GROUP BY major; BEGIN . END Up;3. 觸發(fā)器答:1) 三個(gè)語句(INSERT/UPDATE/DELETE); 2) 二種類型(之前/之后); 3) 二種級(jí)別(row-level/statement-level); 所以一共有 3 X 2 X 2 = 124. 觸發(fā)器的限制答:1) 不應(yīng)該使用事務(wù)控制語句; 2) 不能聲明任何LONG或LONG RAW變量; 3) 可以訪問的表有限。5. 觸發(fā)器的主體可以訪問的表答:1) 不可以讀取或修改任何變化表(被DML語句正在修改的表); 2) 不可以讀取或修改限制表(帶有約束的表)的主鍵、唯一值、外鍵列。(4)Java開發(fā)中使用Oracle的ORA-01000很多朋友在Java開發(fā)中,使用Oracle數(shù)據(jù)庫的時(shí)候,經(jīng)常會(huì)碰到有ORA-01000: maximum open cursors exceeded.的錯(cuò)誤。實(shí)際上,這個(gè)錯(cuò)誤的原因,主要還是代碼問題引起的。 ora-01000: maximum open cursors exceeded. 表示已經(jīng)達(dá)到一個(gè)進(jìn)程打開的最大游標(biāo)數(shù)。 這 樣的錯(cuò)誤很容易出現(xiàn)在Java代碼中的主要原因是:Java代碼在執(zhí)行conn.createStatement()和 conn.prepareStatement()的時(shí)候,實(shí)際上都是相當(dāng)與在數(shù)據(jù)庫中打開了一個(gè)cursor。尤其是,如果你的 createStatement和prepareStatement是在一個(gè)循環(huán)里面的話,就會(huì)非常容易出現(xiàn)這個(gè)問題。因?yàn)橛螛?biāo)一直在不停的打開,而且沒 有關(guān)閉。一般來說,我們?cè)趯慗ava代碼的時(shí)候,createStatement和prepareStatement都應(yīng)該要放在循環(huán)外面,而且 使用了這些Statment后,及時(shí)關(guān)閉。最好是在執(zhí)行了一次executeQuery、executeUpdate等之后,如果不需要使用結(jié)果集 (ResultSet)的數(shù)據(jù),就馬上將Statment關(guān)閉。對(duì)于出現(xiàn)ORA-01000錯(cuò)誤這種情況,單純的加大open_cursors并不是好辦法,那只是治標(biāo)不治本。實(shí)際上,代碼中的隱患并沒有解除。 而且,絕大部分情況下,open_cursors只需要設(shè)置一個(gè)比較小的值,就足夠使用了,除非有非常特別的要求。(5)在store procedure中執(zhí)行 DDL語句一 是:execute immediate update |table_chan| set |column_changed| = |v_trans_name| where empid = |v_empid| ;二是:The DBMS_SQL package can be used to execute DDL statements directly from PL/SQL. 這是一個(gè)創(chuàng)建一個(gè)表的過程的例子。該過程有兩個(gè)參數(shù):表名和字段及其類型的列表。CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS cursor1 INTEGER; BEGIN cursor1 := dbms_sql.open_cursor; dbms_sql.parse(cursor1, CREATE TABLE | tablename | ( | cols | ), dbms_sql.v7); dbms_sql.close_cursor(cursor1); end; / 2 如何找數(shù)據(jù)庫表的主鍵字段的名稱?SQLSELECT * FROM user_constraintsWHERE CONSTRAINT_TYPE=P and table_name=TABLE_NAME;3 如何查詢數(shù)據(jù)庫有多少表?SQLselect * from all_tables;4 使用sql統(tǒng)配符通 配符 描述 示例 % 包含零個(gè)或更多字符的任意字符串。 WHERE title LIKE %computer% 將查找處于書名任意位置的包含單詞 computer 的所有書名。 _(下劃線) 任何單個(gè)字符。 WHERE au_fname LIKE _ean 將查找以 ean 結(jié)尾的所有 4 個(gè)字母的名字(Dean、Sean 等)。 指定范圍 (a-f) 或集合 (abcdef) 中的任何單個(gè)字符。 WHERE au_lname LIKE C-Parsen 將查找以arsen 結(jié)尾且以介于 C 與 P 之間的任何單個(gè)字符開始的作者姓氏,例如,Carsen、Larsen、Karsen 等。 不屬于指定范圍 (a-f) 或集合 (abcdef) 的任何單個(gè)字符。 WHERE au_lname LIKE del% 將查找以 de 開始且其后的字母不為 l 的所有作者的姓氏。5使普通用戶有查看v$Session的權(quán)限GRANT SELECT ON SYS.V_$OPEN_CURSOR TO SFISM4; GRANT SELECT ON SYS.V_$SESSION TO SFISM4;常用函數(shù)distinct去掉重復(fù)的minus 相減在第一個(gè)表但不在第二個(gè)表SELECT * FROM FOOTBALL MINUS SELECT * FROM SOFTBALL;intersect 相交INTERSECT 返回兩個(gè)表中共有的行。SELECT * FROM FOOTBAL;UNION ALL 與UNION 一樣對(duì)表進(jìn)行了合并但是它不去掉重復(fù)的記錄。匯總函數(shù)countselect count(*) from test;SUMSUM 就如同它的本意一樣它返回某一列的所有數(shù)值的和。SELECT SUM(SINGLES) TOTAL_SINGLES FROM TEST;SUM 只能處理數(shù)字如果它的處理目標(biāo)不是數(shù)字你將會(huì)收到如下信息輸入/輸出SQLSELECT SUM(NAME) FROM TEAMSTATS;ERRORORA-01722 invalid numberno rows selected該錯(cuò)誤信息當(dāng)然的合理的因?yàn)镹AME 字段是無法進(jìn)行匯總的。AVGAVG 可以返回某一列的平均值。SELECT AVG(SO) AVE_STRIKE_OUTS FROM TEAMSTATS;MAX如果你想知道某一列中的最大值請(qǐng)使用MAX。SELECT MAX(HITS) FROM TEAMSTATS;MINMIN 與MAX 類似它返回一列中的最小數(shù)值。VARIANCEVARIANCE 方差不是標(biāo)準(zhǔn)中所定義的但它卻是統(tǒng)計(jì)領(lǐng)域中的一個(gè)至關(guān)重要的數(shù)值。SELECT VARIANCE(HITS) FROM TEAMSTATS;STDDEV這是最后一個(gè)統(tǒng)計(jì)函數(shù)STDDEV 返回某一列數(shù)值的標(biāo)準(zhǔn)差。SELECT STDDEV HITS FROM TEAMSTATS;日期時(shí)間函數(shù)ADD_MONTHS ADD_MONTHS也可以工作在select 之外該函數(shù)的功能是將給定的日期增加一個(gè)月舉例來說由于一些特殊的原因上述的計(jì)劃需要推遲兩個(gè)月那么就用到了。LAST_DAYLAST_DAY 可以返回指定月份的最后一天.MONTHS_BETWEEN如果你想知道在給定的兩個(gè)日期中有多少個(gè)月可以使用MONTHS_BETWEEN。select task, startdate, enddate ,months between(Startdate,enddate) duration from project;返回結(jié)果有可能是負(fù)值.可以利用負(fù)值來判斷某一日期是否在另一個(gè)日期之前下例將會(huì)顯示所有在1995 年5 月19 日以前開始的比賽.SELECT * FROM PROJECTWHERE MONTHS_BETWEEN (19-MAY-95, STARTDATE)0;NEW_TIME如果你想把時(shí)間調(diào)整到你所在的時(shí)區(qū)你可以使用NEW_TIME.SQLSELECT ENDDATE EDT, NEW_TIME(ENDDATE, EDT, PDT) FROM PROJECT;NEXT_DAYNEXT_DAY 將返回與指定日期在同一個(gè)星期或之后一個(gè)星期內(nèi)的你所要求的星期天數(shù)的確切日期如果你想知道你所指定的日期的星期五是幾號(hào)可以這樣做.SQLSELECT STARTDATE, NEXT_DAY(STARTDATE, FRIDAY) FROM PROJECT;SYSDATESYSDATE 將返回系統(tǒng)的日期和時(shí)間。SELECT DISTINCT SYSDATE FROM PROJECT;數(shù)學(xué)函數(shù)ABSABS 函數(shù)返回給定數(shù)字的絕對(duì)值CEIL 和FLOORCEIL 返回與給定參數(shù)相等或比給定參數(shù)在的最小整數(shù).FLOOR 則正好相反它返回與給定參數(shù)相等或比給定參數(shù)小的最大整數(shù).COS COSH SIN SINH TAN TANHCOS SIN TAN 函數(shù)可以返回給定參數(shù)的三角函數(shù)值默認(rèn)的參數(shù)認(rèn)定為弧度制.EXPEXP 將會(huì)返回以給定的參數(shù)為指數(shù)以e 為底數(shù)的冪.LN and LOG這是兩個(gè)對(duì)數(shù)函數(shù)其中LN 返回給定參數(shù)的自然對(duì)數(shù).MOD知道在ANSI 標(biāo)準(zhǔn)中規(guī)定取模運(yùn)算的符號(hào)為%在一些解釋器中被函數(shù)MOD 所取代.POWER該函數(shù)可以返回某一個(gè)數(shù)對(duì)另一個(gè)數(shù)的冪在使用冪函數(shù)時(shí)第一個(gè)參數(shù)為底數(shù)第二個(gè)為指數(shù)。SIGN如果參數(shù)的值為負(fù)數(shù)那么SIGN 返回-1 如果參數(shù)的值為正數(shù)那么SIGN 返回1,如果參數(shù)為零那么SIGN 也返回零.SQRT該函數(shù)返回參數(shù)的平方根,由于負(fù)數(shù)是不能開平方的所以我們不能將該函數(shù)應(yīng)用于負(fù)數(shù).字符函數(shù)CHR該函數(shù)返回與所給數(shù)值參數(shù)等當(dāng)?shù)淖址祷氐淖址Q于數(shù)據(jù)庫所依賴的字符集.CONCAT和|一個(gè)作用,把兩個(gè)字符串連接起來.INITCAP該函數(shù)將參數(shù)的第一個(gè)字母變?yōu)榇髮懘送馄渌淖帜竸t轉(zhuǎn)換成小寫.LOWER 和UPPER如你所料LOWER 將參數(shù)轉(zhuǎn)換為全部小寫字母而UPPER 則把參數(shù)全部轉(zhuǎn)換成大寫字母.LPAD 與RPAD這兩個(gè)函數(shù)最少需要兩個(gè)參數(shù)最多需要三個(gè)參數(shù)每一個(gè)參數(shù)是需要處理的字符串第二個(gè)參數(shù)是需要將字符串?dāng)U充的寬度第三個(gè)參數(shù)表示加寬部分用什么字符來做填補(bǔ)第三個(gè)參數(shù)的默認(rèn)值為空格但也可以是單個(gè)的字符或字符串.LTRIM 與RTRIMLTRIM 和RTRIM至少需要一個(gè)參數(shù)最多允許兩個(gè)參數(shù)第一個(gè)參數(shù)與LPAD 和RPAD類似是一個(gè)字符串第二個(gè)參數(shù)也是一個(gè)字符或字符串默認(rèn)則是空格如果第二個(gè)數(shù)不是空格的話那么該函數(shù)將會(huì)像剪除空格那樣剪除所指定的字符.REPLACE它的工作就如果它的名字所說的那樣該函數(shù)需要三個(gè)參數(shù)第一個(gè)參數(shù)是需要搜索的字符串(列名),第二個(gè)參數(shù)是搜索的內(nèi)容第三個(gè)參數(shù)則是需要替換成的字符串如果第三個(gè)參數(shù)省略或者是NULL 那么將只執(zhí)行搜索操作而不會(huì)替換任何內(nèi)容.SUBSTR這個(gè)函數(shù)有三個(gè)參數(shù)允許你將目標(biāo)字符串的一部份輸出,第一個(gè)參數(shù)為目標(biāo)字符串,第二個(gè)字符串是將要輸出的子串的起點(diǎn),第三個(gè)參數(shù)是將要輸出的子串的長度。如果第二個(gè)參數(shù)為負(fù)數(shù)那么將會(huì)從源串的尾部開始向前定位至負(fù)數(shù)的絕對(duì)值的位置。TRANSLATE這一函數(shù)有三個(gè)參數(shù),目標(biāo)字符串、源字符串和目的字符串,在目標(biāo)字符串與源字符串中均出現(xiàn)的字符將會(huì)被替換成對(duì)應(yīng)的目的字符串的字符。INSTR如果需要知道在一個(gè)字符串中滿足特定的內(nèi)容的位置可以使用INSTR ,它的第一個(gè)參數(shù)是目標(biāo)字符串,第二個(gè)參數(shù)是匹配的內(nèi)容,第三和第四個(gè)參數(shù)是數(shù)字用以指定開始搜索的起點(diǎn)以及指出第幾個(gè)滿足條件的將會(huì)被返回。LENGTHLENGTH將返回指定字符串的長度。轉(zhuǎn)換函數(shù)轉(zhuǎn)換函數(shù)有三個(gè)可以使你方便地將數(shù)據(jù)從一種類型變換為另一種類型。TO_CHAR該函數(shù)的最初功能是將一個(gè)數(shù)字轉(zhuǎn)換為字符型,不同的解釋器可能會(huì)使用它來轉(zhuǎn)換其它的數(shù)據(jù)類型例如日期型轉(zhuǎn)換為字符型或者是擁有更多的參數(shù)。TO_NUMBER該函數(shù)與TO_CHAR 函數(shù)相對(duì)應(yīng)顯而易見它是將一個(gè)字符串型數(shù)字轉(zhuǎn)換為數(shù)值型。其他函數(shù)GREATEST 與LEAST這兩個(gè)函數(shù)將返回幾個(gè)表達(dá)式中最大的和最小的。SELECT GREATEST(ALPHA, BRAVO, FOXTROT, DELTA) FROM CONVERT;看來有必要使用FROM 子句可是如果FROM 子句沒有的話你將會(huì)收到一個(gè)錯(cuò)誤信息每一個(gè)SELECT 語句都需要FROM 子句。USER該函數(shù)返回當(dāng)前使用數(shù)據(jù)庫的用戶的名字用java調(diào)用oracle存儲(chǔ)過程總結(jié)網(wǎng)址: /digest/2008/05/java_oracle_procedure.html 1、什么是存儲(chǔ)過程。存儲(chǔ)過程是數(shù)據(jù)庫服務(wù)器端的一段程序,它有兩種類型。一種類似于SELECT查詢,用于檢索數(shù)據(jù),檢索到的數(shù)據(jù)能夠以數(shù)據(jù)集的形式返回給客戶。另一種類似于INSERT或DELETE查詢,它不返回?cái)?shù)據(jù),只是執(zhí)行一個(gè)動(dòng)作。有的服務(wù)器允許同一個(gè)存儲(chǔ)過程既可以返回?cái)?shù)據(jù)又可以執(zhí)行動(dòng)作。2、什么時(shí)候需要用存儲(chǔ)過程如果服務(wù)器定義了存儲(chǔ)過程,應(yīng)當(dāng)根據(jù)需要決定是否要用存儲(chǔ)過程。存儲(chǔ)過程通常是一些經(jīng)常要執(zhí)行的任務(wù),這些任務(wù)往往是針對(duì)大量的記錄而進(jìn)行的。在服務(wù)器上執(zhí)行存儲(chǔ)過程,可以改善應(yīng)用程序的性能。這是因?yàn)椋?服務(wù)器往往具有強(qiáng)大的計(jì)算能力和速度。.避免把大量的數(shù)據(jù)下載到客戶端,減少網(wǎng)絡(luò)上的傳輸量。例如,假設(shè)一個(gè)應(yīng)用程序需要計(jì)算一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)需要涉及到許多記錄。如果不使用存儲(chǔ)過程的話,把這些數(shù)據(jù)下載到客戶端,導(dǎo)致網(wǎng)絡(luò)上的流量劇增。不僅如此,客戶端可能是一臺(tái)老掉牙的計(jì)算機(jī),它的運(yùn)算速度很慢。而改用存儲(chǔ)過程后,服務(wù)器會(huì)很快地把數(shù)據(jù)計(jì)算出來,并且只需傳遞一個(gè)數(shù)據(jù)給客戶端,其效率之高是非常明顯的。3、存儲(chǔ)過程的參數(shù)要執(zhí)行服務(wù)器上的存儲(chǔ)過程,往往要傳遞一些參數(shù)。這些參數(shù)分為四種類型:第一種稱為輸入?yún)?shù),由客戶程序向存儲(chǔ)過程傳遞值。第二種稱為輸出參數(shù),由存儲(chǔ)過程向客戶程序返回結(jié)果。第三種稱為輸入/輸出參數(shù),既可以由客戶程序向存儲(chǔ)過程傳遞值,也可以由存儲(chǔ)過程向客戶程序返回結(jié)果。第四種稱為狀態(tài)參數(shù),由存儲(chǔ)過程向客戶程序返回錯(cuò)誤信息。要說明的是,并不是所有的服務(wù)器都支持上述四種類型的參數(shù),例如,InterBase就不支持狀態(tài)參數(shù)。4、oracle 存儲(chǔ)過程的基本語法 1.基本結(jié)構(gòu)CREATE OR REPLACEPROCEDURE 存儲(chǔ)過程名字( 參數(shù)1 IN NUMBER, 參數(shù)2 IN NUMBER) IS變量1 INTEGER :=0;變量2 DATE;BEGIN END 存儲(chǔ)過程名字2.SELECT INTO STATEMENT 將select查詢的結(jié)果存入到變量中,可以同時(shí)將多個(gè)列存儲(chǔ)多個(gè)變量中,必須有一條 記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END;一:無返回值的存儲(chǔ)過程存儲(chǔ)過程為:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) ASBEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME) S (PARA1, PARA2);END TESTA;然后呢,在java里調(diào)用時(shí)就用下面的代碼:package com.hyq.src;import java.sql.*;import java.sql.ResultSet;public class TestProcedureOne public TestProcedureOne() public static void main(String args ) String driver = oracle.jdbc.driver.OracleDriver; String strUrl = jdbc:oracle:thin::1521: hyq ; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try Class.forName(driver); conn = DriverManager.getConnection(strUrl, hyq , hyq ); CallableStatement proc = null; proc = conn.prepareCall( call HYQ.TESTA(?,?) ); proc.setString(1, 100); proc.setString(2, TestOne); proc.execute(); catch (SQLException ex2) ex2.printStackTrace(); catch (Exception ex2) ex2.printStackTrace(); finally try if(rs != null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); catch (SQLException ex1) 當(dāng)然了,這就先要求要建張表TESTTB,里面兩個(gè)字段(I_ID,I_NAME)。二:有返回值的存儲(chǔ)過程(非列表)存儲(chǔ)過程為:CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) ASBEGIN SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; END TESTB;在java里調(diào)用時(shí)就用下面的代碼:package com.hyq.src;public class TestProcedureTWO public TestProcedureTWO() public static void main(String args ) String driver = oracle.jdbc.driver.OracleDriver; String strUrl = jdbc:oracle:thin::1521:hyq; Statement stmt = null; ResultSet rs = null; Connection conn = null; try Class.forName(driver); conn = DriverManager.getConnection(strUrl, hyq , hyq ); CallableStatement proc = null; proc = conn.prepareCall( call HYQ.TESTB(?,?) ); proc.setString(1, 100); proc.registerOutParameter(2, Types.VARCHAR); proc.execute(); String testPrint = proc.getString(2); System.out.println(=testPrint=is=+testPrint); catch (SQLException ex2) ex2.printStackTrace(); catch (Exception ex2) ex2.printStackTrace(); finally try if(rs != null) rs.close(); if(stmt!=null) stmt.close(); if(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 采摘園日常管理制度
- 采礦運(yùn)營部管理制度
- 重卡模塊化管理制度
- 鑰匙或門禁管理制度
- 銅電解設(shè)備管理制度
- 鋁錠廠現(xiàn)場(chǎng)管理制度
- 銀行適當(dāng)性管理制度
- 鋰電池品質(zhì)管理制度
- 2025至2030年中國塑料土工格柵生產(chǎn)線行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國剎車片附件行業(yè)投資前景及策略咨詢報(bào)告
- 2025年江蘇省泰州市中考二模數(shù)學(xué)試題(含部分答案)
- 鋼筋綁扎技術(shù)交底(鋼筋)
- 2025浙江杭州市科創(chuàng)集團(tuán)有限公司招聘10人筆試參考題庫附帶答案詳解
- 貸款居間協(xié)議書范本
- 佛山事業(yè)考試試題及答案
- 施工過程中常見安全隱患的識(shí)別與預(yù)防
- 物業(yè)住宅小區(qū)弱電系統(tǒng)培訓(xùn)課件
- 赤峰山金紅嶺有色礦業(yè)有限責(zé)任公司招聘筆試題庫2025
- 水電安裝施工合同范本7篇
- 項(xiàng)目樣板引路管理制度
- 語文基礎(chǔ)模塊上知到課后答案智慧樹章節(jié)測(cè)試答案2025年春長春市城建工程學(xué)校
評(píng)論
0/150
提交評(píng)論