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

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

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

    Atea - Hero's Grave

    面向對象,開源,框架,敏捷,云計算,NoSQL,商業智能,編程思想。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
    PACKAGE分為HEADER和BODY部分。

    HEADER
     1 CREATE OR REPLACE PACKAGE PACKAGE_NAME IS
     2 
     3 --PUBLIC PROPERTY
     4 TYPE LISTDATA_CURSOR IS REF CURSOR;
     5 
     6 --PUBLIC FUNCTION
     7 FUNCTION FUNCTION_NAME
     8 (
     9     --Out Parameter
    10     PO_varErrCd     OUT VARCHAR2,  --例: TABLENAME.COLUMN%TYPE
    11     PO_varErrMsg    OUT VARCHAR2,
    12     --In Parameter
    13     PI_varName      IN  VARCHAR2
    14 )
    15 RETURN LISTDATA_CURSOR; --return type,例: CURSOR
    16 
    17 END;
    18 /

    BODY
     1 CREATE OR REPLACE PACKAGE BODY PACKAGE_NAME IS
     2 FUNCTION FUNCTION_NAME
     3 (
     4     PO_varErrCd     OUT VARCHAR2,
     5     PO_varErrMsg    OUT VARCHAR2,
     6     PI_varName      IN  VARCHAR2
     7 )
     8 RETURN LISTDATA_CURSOR  IS
     9 
    10     TYPE TYP_Cur IS REF CURSOR;
    11     curGetList TYP_Cur;
    12 
    13 BEGIN
    14 
    15     OPEN curGetList FOR --open CURSOR
    16         SELECT
    17             TABLE_NAME.COLUMN_NAME1,
    18             TABLE_NAME.COLUMN_NAME2
    19         FROM
    20             TABLE_NAME
    21         WHERE
    22             TABLE_NAME.COLUMN_NAME3 = PI_varName
    23     RETURN  curGetList; --return CURSOR,相當于返回了一個結果集
    24 
    25 EXCEPTION
    26     WHEN OTHERS THEN
    27         PO_varErrCd     :=  SQLCODE;
    28         PO_varErrMsg    :=  SQLERRM;
    29         IF curGetList%ISOPEN THEN
    30             CLOSE curGetList;
    31         END IF;
    32         RETURN NULL;
    33 END FUNCTION_NAME;
    34 
    35 END;
    36 /

    用OJDBC調用的方法
     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.Types;
     4 
     5 import oracle.jdbc.OracleTypes;
     6 import oracle.jdbc.driver.OracleCallableStatement;
     7 import oracle.jdbc.driver.OracleResultSet;
     8 
     9 public class MyTest {
    10 
    11     private static Connection con;
    12 
    13     public static void main(String[] args) throws Exception {
    14 
    15         String connect = "jdbc:oracle:thin:@IP:PORT:DOMAIN_NAME";
    16         Class.forName("oracle.jdbc.driver.OracleDriver");
    17         con = DriverManager.getConnection(connect, "USERNAME""PSW");
    18 
    19         test();
    20     }
    21 
    22     public static void test() throws Exception {
    23 
    24         OracleCallableStatement stmt = null;
    25         OracleResultSet ors = null;
    26 
    27         try {
    28             String strSql = "{? = call PACKAGE_NAME.FUNCTION_NAME( ?, ?, ? ) }";
    29             stmt = (OracleCallableStatement) con.prepareCall(strSql);
    30 
    31             // set result type
    32             stmt.registerOutParameter(1, OracleTypes.CURSOR);
    33             stmt.registerOutParameter(2, Types.VARCHAR);
    34             stmt.registerOutParameter(3, Types.VARCHAR);
    35 
    36             // set condition
    37             stmt.setString(4"CONDITION_VALUE");
    38 
    39             stmt.execute();
    40             ors = (OracleResultSet) stmt.getCursor(1);
    41 
    42             while (ors.next()) {
    43                 System.out.print(ors.getString("COLUMN_NAME1"+ " ");
    44                 System.out.print(ors.getString("COLUMN_NAME2"+ " ");
    45                 System.out.println();
    46             }
    47         } finally {
    48             if (ors != null) {
    49                 ors.close();
    50             }
    51             if (stmt != null) {
    52                 stmt.close();
    53             }
    54             if (con != null) {
    55                 con.close();
    56             }
    57         }
    58     }
    59 }

    用FUNCTION調用的方法
     1 CREATE OR REPLACE FUNCTION FUNCTION_NAME
     2 RETURN BOOLEAN
     3 IS
     4     TYPE TYP_Cur IS REF CURSOR;
     5     curGetList TYP_Cur;
     6 
     7     PO_varErrCd CHARACTER;
     8     PO_varErrMsg CHARACTER;
     9 
    10     --定義接收游標返回項目的變量
    11     --變量的數量要和游標返回項目的數量一致
    12     --接收單條數據
    13     varA TABLE_NAME.COLUMN_NAME1%TYPE;
    14     varB TABLE_NAME.COLUMN_NAME2%TYPE;
    15     --接收多條數據
    16     TYPE tableNameArray1 IS TABLE OF TABLE_NAME.COLUMN_NAME1%TYPE
    17         INDEX BY BINARY_INTEGER;
    18     tableName1  tableNameArray1;
    19     TYPE tableNameArray2 IS TABLE OF TABLE_NAME.COLUMN_NAME2%TYPE
    20         INDEX BY BINARY_INTEGER;
    21     tableName2  tableNameArray2;
    22     intCount INTEGER:=0;
    23 
    24 BEGIN
    25 
    26     curGetList := PACKAGE_NAME.FUNCTION_NAME(PO_varErrCd, PO_varErrMsg, 'CONDITION_VALUE');
    27     LOOP
    28         EXIT WHEN curGetList%NOTFOUND;
    29 
    30         --FETCH curGetList INTO varA,varB;
    31         --DBMS_OUTPUT.put_line(varA || ' ' || varB);
    32 
    33         FETCH curGetList INTO tableName1(intCount),tableName2(intCount);
    34         intCount := intCount + 1;
    35     END LOOP;
    36 
    37     --FOR i IN 1..tableName1.COUNT LOOP
    38     FOR i IN 1..intCount LOOP
    39         DBMS_OUTPUT.put_line(tableName1(i-1));
    40         DBMS_OUTPUT.put_line(tableName2(i-1));
    41     END LOOP;
    42 
    43     CLOSE curGetList;
    44     RETURN  TRUE;
    45 
    46 EXCEPTION
    47     --
    48 END;
    49 /

    posted on 2008-12-26 20:22 Atea 閱讀(352) 評論(0)  編輯  收藏 所屬分類: Database
    主站蜘蛛池模板: 69精品免费视频| 新最免费影视大全在线播放| 91禁漫免费进入| 国产V亚洲V天堂A无码| a级毛片毛片免费观看永久| 亚洲人成色77777| 免费无码又爽又刺激网站直播| 亚洲伊人成无码综合网| 久久久精品视频免费观看| 亚洲中文字幕无码久久精品1| 久久最新免费视频| 婷婷久久久亚洲欧洲日产国码AV | 久久久亚洲精品蜜桃臀| 日韩电影免费在线观看网站| 亚洲成AV人片在WWW色猫咪| 暖暖在线视频免费视频| 亚洲成电影在线观看青青| 97无码免费人妻超级碰碰碰碰| 亚洲最大中文字幕无码网站| 日韩一区二区免费视频| 大片免费观看92在线视频线视频| 精品国产亚洲男女在线线电影 | 一级一级一片免费高清| 亚洲成AV人片在| 无码中文在线二区免费| 国产亚洲高清在线精品不卡| 亚洲中文字幕无码中文字在线| 曰批全过程免费视频播放网站| 亚洲欧美日韩久久精品| 国产专区一va亚洲v天堂| 1000部啪啪未满十八勿入免费| 亚洲乱亚洲乱妇24p| 亚洲中文字幕丝袜制服一区| 日韩内射激情视频在线播放免费| 亚洲精品国产精品国自产网站 | 亚洲av成人一区二区三区在线观看 | 亚洲精品无码aⅴ中文字幕蜜桃| 免费大片黄手机在线观看| 在线观看肉片AV网站免费| 亚洲一区二区三区播放在线 | 国产精品久久久久久久久免费|