<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    soobur

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      2 隨筆 :: 1 文章 :: 1 評論 :: 0 Trackbacks

    【環境】:
    ??? winXP sp2
    ????? oracle 9.2.0.1.0
    【輔助工具】:
    ??? JDeveloper904(寫sqlj代碼用)

    ??? 由于第一次用sqlj,對oracle jvm和觸發器都不是很了解,所以程序能執行成什么樣子也不知道,只能一步一步的摸索……

    【一些很失敗的操作】:

    ??? 1、用9i的OEM來創建java源,沒有在命令行下用loadjava!
    ??? 用JDeveloper寫好了程序之后,直接用OEM創建“java源”,然后把代碼粘貼進去,編譯,通過……這樣做看似可以運行,實際上有一些編譯過程中的warning都沒有顯示,所以也不知道到底會不會有錯誤(影響不大,不過建議最好去命令行下去做),但是,這樣創建很容易犯一個致命的錯誤,就是創建的時候很容易把java文件的包信息忽略,比如,偶的sqlj文件頭是這樣的:
    package com.supermap.subo;

    import sqlj.runtime.*;
    import sqlj.runtime.ref.*;
    import java.sql.*;
    import oracle.sqlj.runtime.*;
    import java.io.File;

    #sql iterator Tuser(Long id , String name);
    public class SqljTest

    在OEM中創建“java源”的時候直接創建SqljTest,然后把代碼復制進去,編譯可以通過,但是在“java類”下面并沒有相應的類生成!而且沒有提示!
    ???
    ??? 2、用OEM去創建PROCEDURE,create or replace procedure test (args varchar2) as language java name 'SqljTest.test(java.lang.String)';(這里也沒有注意到要這樣引用:'com.supermap.subo.SqljTest.test(java.lang.String)';也沒有任何的錯誤提示,編譯一直是Valid!)
    ???
    ??? 3、用OEM創建觸發器:create or replace trigger test after update of NAME on T_USER for each row CALL test2(:old.NAME) ,這么創建倒是沒什么問題,不過總是提示ORA-00963:缺少表達式!后來證明用同樣的語句到sqlplus下去創建,不會有錯誤!

    【成功的操作】:
    ??? 1、編寫sqlj代碼:
    package com.supermap.subo;

    import sqlj.runtime.*;
    import sqlj.runtime.ref.*;
    import java.sql.*;
    import oracle.sqlj.runtime.*;
    import java.io.File;

    #sql iterator Tuser(Long id , String name);
    public class SqljTest
    {
    ? public static void test(String args)
    ??? {
    ??? try
    ??? {
    ????? Oracle.connect("jdbc:oracle:thin:@localhost:1521:SOOBUR","SYSTEM","supermap");?
    ????? Tuser u;
    ????? #sql
    ??????? u = { SELECT ID,NAME FROM SOOBUR.T_USER WHERE ID = 1 };
    ??????? while(u.next())
    ??????? {
    ????????? System.out.println(u.name());
    ????????? if (u.name().equals("user_8762886"))
    ????????? {
    ??????????? File fo = new File("c:/test.txt");
    ??????????? fo.createNewFile();
    ????????? }
    ??????? }
    ??? } catch (Exception ex)
    ??? {
    ????? ex.printStackTrace();
    ??? }
    ? }
    }
    ??? 2、乖乖的到命令行下去loadjava:loadjava -user [username]/[pass]@SID -o -v -r ./SqljTest.sqlj
    這回有提示了:
    errors?? : source com/supermap/subo/SqljTest
    ??? com/supermap/subo/SqljTest:18: Warning: 從 NUMERIC(38) 轉換到列 java.lang.Long id 時, 可能會降低精度。
    ????????? #sql
    ????????? ^
    ???? Info: 1 warnings
    問題不大,這個時候再打開OEM看一下,“java源”顯示的是com/supermap/subo/SqljTest名字明顯的不一樣了!“java類”下面也有了相應的目錄結構和類!
    ??? 3、登陸到sqlplus,create or replace procedure test (args varchar2) as language java name 'SqljTest.test(java.lang.String)';
    ????? 4、create or replace trigger test after update of NAME on T_USER for each row CALL test2(:old.NAME)
    ????? 5、然后隨便update一條記錄,成功!test.txt也創建成功(原來以為oracle的jvm可能會受限制,不能隨便對其他目錄進行讀寫,現在看來不是這樣的^_^)!

    【小節一下】 :
    ??? 做試驗的時候千萬不要怕麻煩!一定要乖乖的到命令行下去一句一句的敲!尤其是像偶這樣初學的xdjm們!好像用OEM可視化的操作很方便,其實很多錯誤都被忽略了,結果自然是不成功了!動輒半天時間耗進去,多不值得!而且oracle的錯誤提示實在是%#×)#……,比如:“ORA-00963:缺少表達式!”、“ORA-04088: 觸發器 'SOOBUR.TEST' 執行過程中出錯”等等……實在讓人是摸不著頭腦!
    ???
    ??? 偶的運氣還是不錯的,試了小半天,終于成功了^_^!
    ??? 寫出來和大家共享,希望老鳥們多多指教,多多糾錯,希望跟偶一樣的菜鳥們吸取偶的教訓^_^
    ???
    ???

    posted on 2006-06-04 14:03 soobur 閱讀(1135) 評論(1)  編輯  收藏 所屬分類: Oracle

    評論

    # re: 用sqlj編寫oracle觸發器成功記^_^ 2007-08-11 22:14 dreamstone
    oracle的東西很多啊。  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲乱码av中文一区二区| 亚洲一区AV无码少妇电影| 成人免费一区二区三区在线观看| 黄桃AV无码免费一区二区三区| 中文字幕无码精品亚洲资源网久久 | 中文毛片无遮挡高清免费| 亚洲欧美国产日韩av野草社区| 亚洲视频在线视频| 亚洲色欲色欲www在线丝| 免费va人成视频网站全| 成人激情免费视频| 曰批全过程免费视频在线观看| 最近免费中文字幕大全免费| 色www永久免费网站| 久久国产精品免费一区| 男男gay做爽爽免费视频| 亚洲国产成人久久一区二区三区| 亚洲另类古典武侠| 亚洲一级毛片免费看| 亚洲AV人无码综合在线观看 | 久久er国产精品免费观看8| 美女的胸又黄又www网站免费| 亚洲成aⅴ人片久青草影院按摩| 亚洲一级毛片中文字幕| 亚洲午夜电影在线观看| 亚洲欧洲日产v特级毛片| 亚洲福利视频导航| 亚洲国产成人久久精品动漫 | 巨胸喷奶水www永久免费| 一级做a爰片久久毛片免费看| 日韩精品无码永久免费网站| 国产亚洲视频在线| 色婷婷综合缴情综免费观看 | 中文字幕在线亚洲精品| 久久亚洲av无码精品浪潮| 精品国产亚洲男女在线线电影| 亚洲中文字幕视频国产| 亚洲熟妇av一区二区三区 | 99热这里只有精品6免费| 最近中文字幕高清免费中文字幕mv| 51在线视频免费观看视频|