您的位置:68399皇家赌场 > 域名注册 > Pl/SQL 编制程序

Pl/SQL 编制程序

发布时间:2019-09-29 14:41编辑:域名注册浏览(119)

    创建表:

    在oracle下创办四个test的账户,然后按一动手续推行:

    Pl/SQL 编程

    68399皇家赌场 168399皇家赌场 2

    1.创建表:STOCK_PRICES

    68399皇家赌场 3View Code

    --创建表格CREATETABLE STOCK_PRICES(    RIC VARCHAR(6) PRIMARYKEY,    PRICE NUMBER(7,2),    UPDATED DATE );
    

    java下促成调用oracle的积攒过程和函数

    在oracle下创办多个test的账户,然后按一下步骤实践:

    一:前言

    68399皇家赌场 4

    1 1 create table tb1(
    2 2 
    3 3 id int ,
    4 4 
    5 5 name nvarchar(20)
    6 6 
    7 7 )
    

    2.插入测验数据:

    68399皇家赌场 5View Code

    --插入数据INSERTINTO stock_prices values('1111',1.0,SYSDATE);INSERTINTO stock_prices values('1112',2.0,SYSDATE);INSERTINTO stock_prices values('1113',3.0,SYSDATE);INSERTINTO stock_prices values('1114',4.0,SYSDATE);
    

    1.创建表:STOCK_PRICES

    68399皇家赌场 6

    --创建表格
    CREATE TABLE STOCK_PRICES(
        RIC VARCHAR(6) PRIMARY KEY,
        PRICE NUMBER(7,2),
        UPDATED DATE );
    

    二:Pl/Sql 概述

    68399皇家赌场 7

    View Code

    3.一无全部一个重临游标: PKG_PUB_UTILS

    68399皇家赌场 8View Code

    --建立一个返回游标CREATEORREPLACE PACKAGE PKG_PUB_UTILS IS--动态游标    TYPE REFCURSOR IS REF CURSOR;END PKG_PUB_UTILS;
    

    2.插入测量检验数据:

    68399皇家赌场 9

    --插入数据
    INSERT INTO stock_prices values('1111',1.0,SYSDATE);
    INSERT INTO stock_prices values('1112',2.0,SYSDATE);
    INSERT INTO stock_prices values('1113',3.0,SYSDATE);
    INSERT INTO stock_prices values('1114',4.0,SYSDATE);
    

    二     ——  1: Pl/Sql块结构

    68399皇家赌场 10

      1 【declare】
      2 --声明部分,可选
      3 begin
      4 --执行部分,必须
      5 [exception]
      6 --异常处理部分,可选
      7 end
    

    68399皇家赌场 1168399皇家赌场 12

    68399皇家赌场 1368399皇家赌场 14

      1 SQL> set serveroutput on;
      2 SQL>
      3 SQL> declare
      4   2  a int:=10;
      5   3  b int:=200;
      6   4  c number;
      7   5  begin
      8   6    c:=(a b)/(a-b);
      9   7    dbms_output.put_line(c);
     10   8  exception
     11   9     when zero_divide then
     12  10       dbms_output.put_line('除数不许为零');
     13  11   end;
     14  12  /
     15 
     16 -1.10526315789473684210526315789473684211
     17 
     18 PL/SQL procedure successfully completed
     19 
     20 SQL>
    

    View Code

    68399皇家赌场 15

    68399皇家赌场 16


    4.创办和存款和储蓄过程:P_GET_PRICE

    68399皇家赌场 17View Code

    68399皇家赌场 18

    --创建存储过程CREATEORREPLACEPROCEDURE P_GET_PRICE(  AN_O_RET_CODE OUT NUMBER,  AC_O_RET_MSG  OUT VARCHAR2,  CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,  AN_I_PRICE INNUMBER) ISBEGIN    AN_O_RET_CODE :=0;    AC_O_RET_MSG  :='操作成功';        OPEN CUR_RET FORSELECT*FROM STOCK_PRICES WHERE PRICE< span>AN_I_PRICE;EXCEPTION    WHEN OTHERS THEN        AN_O_RET_CODE :=-1;        AC_O_RET_MSG  :='错误代码:'|| SQLCODE || CHR(13) ||'错误信息:'|| SQLERRM;END P_GET_PRICE;
    

    68399皇家赌场 19

    </span>

    3.赤手空拳一个回到游标: PKG_PUB_UTILS

    68399皇家赌场 20

    --建立一个返回游标
    CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS
        --动态游标
        TYPE REFCURSOR IS REF CURSOR;
    END PKG_PUB_UTILS;
    

    二     ——  2:  代码注释和标志符

    68399皇家赌场 21

    开创重临游标的储存进程:

    5.创建函数:

    68399皇家赌场 22View Code

    68399皇家赌场 23

    --创建函数:F_GET_PRICECREATEORREPLACEFUNCTION F_GET_PRICE(v_price INNUMBER)    RETURN PKG_PUB_UTILS.REFCURSORAS    stock_cursor PKG_PUB_UTILS.REFCURSOR;BEGINOPEN stock_cursor FORSELECT*FROM stock_prices WHERE price < span> v_price;    RETURN stock_cursor;END;
    

    68399皇家赌场 24

    </span>

    4.创建和仓储进程:P_GET_PRICE

    68399皇家赌场 25

    68399皇家赌场 26

    --创建存储过程
    CREATE OR REPLACE PROCEDURE P_GET_PRICE
    (
      AN_O_RET_CODE OUT NUMBER,
      AC_O_RET_MSG  OUT VARCHAR2,
      CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,
      AN_I_PRICE IN NUMBER
    ) 
    IS
    BEGIN
        AN_O_RET_CODE := 0;
        AC_O_RET_MSG  := '操作成功';
    
        OPEN CUR_RET FOR
            SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;
    EXCEPTION
        WHEN OTHERS THEN
            AN_O_RET_CODE := -1;
            AC_O_RET_MSG  := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;
    END P_GET_PRICE;
    

    68399皇家赌场 27

    二     —— 2_____1:单行注释

    68399皇家赌场 28

    68399皇家赌场 2968399皇家赌场 30

      1 SQL>  set serveroutput on;       --在服务器端 输出结果
      2 SQL>  declare
      3   2
      4   3     Num_sal number;          --- 声明一个数值变量
      5   4     Var_ename varchar(20);   --- 声明一个字符串变量
      6   5   begin
      7   6      select e.ename,e.sal into Var_ename,Num_sal  from emp e where empno=7839;  --检索指定的值并储存到变量中
      8   7      dbms_output.put_line(Var_ename||'工资是'||Num_sal);
      9   8  end;
     10   9
     11  10
     12  11  /
     13 
     14 KING工资是5000
     15 
     16 PL/SQL procedure successfully completed
    

    View Code

    68399皇家赌场 31

    68399皇家赌场 32

    68399皇家赌场 3368399皇家赌场 34

    6.JAVA调用存储进度再次回到结果集

    代码示例:JDBCoracle10G_INVOKEPROCEDURE.java

    68399皇家赌场 35View Code

    68399皇家赌场 36

    import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* 本例是通过调用oracle的存储过程来返回结果集: * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip */publicclass JDBCoracle10G_INVOKEPROCEDURE {    Connection conn = null;    Statement statement = null;    ResultSet rs = null;    CallableStatement stmt = null;    String driver;    String url;    String user;    String pwd;    String sql;    String in_price;    public JDBCoracle10G_INVOKEPROCEDURE()     {        driver = "oracle.jdbc.driver.OracleDriver";        url = "jdbc:oracle:thin:@localhost:1521:ORCL";        // oracle 用户        user = "test";        // oracle 密码        pwd = "test";        init();        // mysid:必须为要连接机器的sid名称,否则会包以下错:        // java.sql.SQLException: Io 异常: Connection        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))        // 参考连接方式:        // Class.forName( "oracle.jdbc.driver.OracleDriver" );        // cn = DriverManager.getConnection(        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );    }    publicvoid init() {        System.out.println("oracle jdbc test");        try {            Class.forName(driver);            System.out.println("driver is ok");            conn = DriverManager.getConnection(url, user, pwd);            System.out.println("conection is ok");            statement = conn.createStatement();            // conn.setAutoCommit(false);            // 输入参数            in_price = "3.0";            // 调用函数            stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");            stmt.registerOutParameter(1, java.sql.Types.FLOAT);            stmt.registerOutParameter(2, java.sql.Types.CHAR);            stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);            stmt.setString(4, in_price);            stmt.executeUpdate();            int retCode = stmt.getInt(1);            String retMsg = stmt.getString(2);            if (retCode == -1) { // 如果出错时,返回错误信息                System.out.println("报错!");            } else {                // 取的结果集的方式一:                rs = ((OracleCallableStatement) stmt).getCursor(3);                // 取的结果集的方式二:                // rs = (ResultSet) stmt.getObject(3);                String ric;                String price;                String updated;                // 对结果进行输出while (rs.next()) {                    ric = rs.getString(1);                    price = rs.getString(2);                    updated = rs.getString(3);                    System.out.println("ric:"   ric   ";-- price:"   price                              "; --"   updated   "; ");                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            System.out.println("close ");        }    }    publicstaticvoid main(String args[])// 自己替换[]    {        new JDBCoracle10G_INVOKEPROCEDURE();    }}
    

    68399皇家赌场 37

    5.创造函数:

    68399皇家赌场 38View Code

    二     —— 2_____2:多行注释

    68399皇家赌场 39

    68399皇家赌场 4068399皇家赌场 41

      1 set serveroutput on;      /*在服务器端 输出结果*/
      2  declare
      3    Num_sal number;
      4    Var_ename varchar2(20);
      5  begin
      6    /*检索指定的值并储存到变量中*/
      7       select e.ename,e.sal into Var_ename,Num_sal  from emp e where empno=7839;  --检索指定的值并储存到变量中
      8     dbms_output.put_line(Var_ename||'工资是'||Num_sal);
      9 end;
     10 /
    

    View Code

    68399皇家赌场 42

    68399皇家赌场 43

     1 create proc tb1_proc (
     2 
     3 @cur cursor varying output
     4 
     5 )
     6 
     7 as
     8 
     9 begin
    10 
    11   set @cur=cursor for
    12 
    13   select * from tb1
    14 
    15 end
    16 
    17 open @cur
    

    7.开采JAVA调用函数再次来到结果集

    代码示例:JDBCoracle10G_68399皇家赌场,INVOKEFUNCTION.java

    68399皇家赌场 44View Code

    68399皇家赌场 45

    import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* /* 本例是通过调用oracle的函数来返回结果集: * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip   */publicclass JDBCoracle10G_INVOKEFUNCTION {    Connection conn = null;    Statement statement = null;    ResultSet rs = null;    CallableStatement stmt = null;    String driver;    String url;    String user;    String pwd;    String sql;    String in_price;    public JDBCoracle10G_INVOKEFUNCTION()    {        driver = "oracle.jdbc.driver.OracleDriver";        url = "jdbc:oracle:thin:@localhost:1521:ORCL";        // oracle 用户        user = "test";        // oracle 密码        pwd = "test";        init();        // mysid:必须为要连接机器的sid名称,否则会包以下错:        // java.sql.SQLException: Io 异常: Connection        // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))        // 参考连接方式:        // Class.forName( "oracle.jdbc.driver.OracleDriver" );        // cn = DriverManager.getConnection(        // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );    }    publicvoid init() {        System.out.println("oracle jdbc test");        try {            Class.forName(driver);            System.out.println("driver is ok");            conn = DriverManager.getConnection(url, user, pwd);            System.out.println("conection is ok");            statement = conn.createStatement();            // conn.setAutoCommit(false);            // 输入参数            in_price = "5.0";            // 调用函数            stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");            // stmt.registerOutParameter(1, java.sql.Types.FLOAT);            // stmt.registerOutParameter(2, java.sql.Types.CHAR);            stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);            stmt.setString(2, in_price);            stmt.executeUpdate();            // 取的结果集的方式一:            rs = ((OracleCallableStatement) stmt).getCursor(1);            // 取的结果集的方式二:            // rs = (ResultSet) stmt.getObject(1);            String ric;            String price;            String updated;            while (rs.next()) {                ric = rs.getString(1);                price = rs.getString(2);                updated = rs.getString(3);                System.out.println("ric:"   ric   ";-- price:"   price   "; --"                          updated   "; ");            }        } catch (Exception e) {            e.printStackTrace();        } finally {            System.out.println("close ");        }    }    publicstaticvoid main(String args[])// 自己替换[]    {        new JDBCoracle10G_INVOKEFUNCTION();    }}
    

    68399皇家赌场 46

     

     

     

    6.JAVA调用存款和储蓄进度再次回到结果集

    代码示例:JDBCoracle10G_INVOKEPROCEDURE.java

    68399皇家赌场 47

    68399皇家赌场 48

    import java.sql.*;
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.OracleTypes;
    
    /* 本例是通过调用oracle的存储过程来返回结果集:
     * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip
     */
    public class JDBCoracle10G_INVOKEPROCEDURE {
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        CallableStatement stmt = null;
    
        String driver;
        String url;
        String user;
        String pwd;
        String sql;
        String in_price;
    
        public JDBCoracle10G_INVOKEPROCEDURE() 
        {
            driver = "oracle.jdbc.driver.OracleDriver";
            url = "jdbc:oracle:thin:@localhost:1521:ORCL";
            // oracle 用户
            user = "test";
            // oracle 密码
            pwd = "test";
            init();
            // mysid:必须为要连接机器的sid名称,否则会包以下错:
            // java.sql.SQLException: Io 异常: Connection
            // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
            // 参考连接方式:
            // Class.forName( "oracle.jdbc.driver.OracleDriver" );
            // cn = DriverManager.getConnection(
            // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );
    
        }
    
        public void init() {
            System.out.println("oracle jdbc test");
            try {
                Class.forName(driver);
                System.out.println("driver is ok");
                conn = DriverManager.getConnection(url, user, pwd);
                System.out.println("conection is ok");
                statement = conn.createStatement();
                // conn.setAutoCommit(false);
                // 输入参数
                in_price = "3.0";
                // 调用函数
                stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");
                stmt.registerOutParameter(1, java.sql.Types.FLOAT);
                stmt.registerOutParameter(2, java.sql.Types.CHAR);
                stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
                stmt.setString(4, in_price);
                stmt.executeUpdate();
                int retCode = stmt.getInt(1);
                String retMsg = stmt.getString(2);
                if (retCode == -1) { // 如果出错时,返回错误信息
                    System.out.println("报错!");
                } else {
                    // 取的结果集的方式一:
                    rs = ((OracleCallableStatement) stmt).getCursor(3);
                    // 取的结果集的方式二:
                    // rs = (ResultSet) stmt.getObject(3);
                    String ric;
                    String price;
                    String updated;
                    // 对结果进行输出
                    while (rs.next()) {
                        ric = rs.getString(1);
                        price = rs.getString(2);
                        updated = rs.getString(3);
                        System.out.println("ric:"   ric   ";-- price:"   price
                                  "; --"   updated   "; ");
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("close ");
            }
        }
    
        public static void main(String args[])// 自己替换[]
        {
            new JDBCoracle10G_INVOKEPROCEDURE();
        }
    }
    

    68399皇家赌场 49

    二     —— 2_____3:PL/SQL字符集

    68399皇家赌场 50

    View Code

    7.开采JAVA调用函数重临结果集

    代码示例:JDBCoracle10G_INVOKEFUNCTION.java

    68399皇家赌场 51

    68399皇家赌场 52

    import java.sql.*;
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.OracleTypes;
    
    /*
     /* 本例是通过调用oracle的函数来返回结果集:
     * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip  
     */
    public class JDBCoracle10G_INVOKEFUNCTION {
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        CallableStatement stmt = null;
    
        String driver;
        String url;
        String user;
        String pwd;
        String sql;
        String in_price;
    
        public JDBCoracle10G_INVOKEFUNCTION()
        {
            driver = "oracle.jdbc.driver.OracleDriver";
            url = "jdbc:oracle:thin:@localhost:1521:ORCL";
            // oracle 用户
            user = "test";
            // oracle 密码
            pwd = "test";
            init();
            // mysid:必须为要连接机器的sid名称,否则会包以下错:
            // java.sql.SQLException: Io 异常: Connection
            // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
            // 参考连接方式:
            // Class.forName( "oracle.jdbc.driver.OracleDriver" );
            // cn = DriverManager.getConnection(
            // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );
        }
    
        public void init() {
            System.out.println("oracle jdbc test");
            try {
                Class.forName(driver);
                System.out.println("driver is ok");
                conn = DriverManager.getConnection(url, user, pwd);
                System.out.println("conection is ok");
                statement = conn.createStatement();
                // conn.setAutoCommit(false);
                // 输入参数
                in_price = "5.0";
                // 调用函数
                stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");
                // stmt.registerOutParameter(1, java.sql.Types.FLOAT);
                // stmt.registerOutParameter(2, java.sql.Types.CHAR);
                stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
                stmt.setString(2, in_price);
                stmt.executeUpdate();
                // 取的结果集的方式一:
                rs = ((OracleCallableStatement) stmt).getCursor(1);
                // 取的结果集的方式二:
                // rs = (ResultSet) stmt.getObject(1);
                String ric;
                String price;
                String updated;
    
                while (rs.next()) {
                    ric = rs.getString(1);
                    price = rs.getString(2);
                    updated = rs.getString(3);
                    System.out.println("ric:"   ric   ";-- price:"   price   "; --"
                              updated   "; ");
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("close ");
            }
        }
    
        public static void main(String args[])// 自己替换[]
        {
            new JDBCoracle10G_INVOKEFUNCTION();
        }
    }
    

    三:数据类型与定义变量和常量

    68399皇家赌场 5368399皇家赌场 54


    三     —— 1:基本数据类型

    68399皇家赌场 55

     使用存款和储蓄进程重返的游标:

    三     —— 1_____1:数值类型

    68399皇家赌场 56

    本文由68399皇家赌场发布于域名注册,转载请注明出处:Pl/SQL 编制程序

    关键词: 68399皇家赌场 Java oracle