在PLSQL中使用DML

1.使用SELECT INTO 进行变量初始化:

DECLARE
    v_average_cost VARCHAR2(10);
BEGIN
    SELECT to_char(AVG(cost), '$9,999.99') INTO v_average_cost FROM course;
    dbms_output.put_line('The average cost of a' ||
                         'course in the CTA program is' || v_average_cost);
END;

在简单的PL/SQL语句块中,数据定义语言(Data Definition Language,DDL)是无效的。(使用更高级的计时,诸如DBMS_SQL包中的过程就能够使用DDL)。但是,通过变量,或者在PL/SQL语句块中使用DML语句,就可以非常容易实现DML操作。

DECLARE
    v_city zipcode.city%TYPE;
BEGIN
    SELECT 'COLUMBUS' INTO v_city FROM dual;
    UPDATE zipcode SET city = v_city WHERE zip = 43224;
END;

也可以在PL/SQL语句块中往数据库中插入数据,

DECLARE
    v_zip  zipcode.zip%TYPE;
    v_user zipcode.created_by%TYPE;
    v_date zipcode.created_date%TYPE;
BEGIN
    SELECT 43438, USER, SYSDATE INTO v_zip, v_user, v_date FROM dual;
    INSERT INTO zipcode
        (zip, created_by, created_date, modified_by, modified_date)
    VALUES
        (v_zip, v_user, v_date, v_user, v_date);
END;

2.在PLSQL语句块中使用DML

编写一个PLSQL语句块,向student表中插入一条新的学生记录。

DECLARE
    v_max_id NUMBER;
BEGIN
    SELECT MAX(student_id) INTO v_max_id FROM student;
    INSERT INTO student
(student_id,
         last_name,
         zip,
         created_by,
         created_date,
         modified_by,
         modified_date,
         registration_date)
    VALUES
        (v_max_id,
         'Rosenzweig',
         11238,
         'BROSENZ',
         '01-JAN-99',
         'BROSENZ',
         '01-JAN-99',
         '01-JAN-99');
END;

在PLSQL语句块中使用序列:

DECLARE
    v_user student.created_by%TYPE;
    v_date student.created_date%TYPE;
BEGIN
    SELECT USER, SYSDATE INTO v_user, v_date FROM dual;
    INSERT INTO student
        (student_id,
         last_name,
         zip,
         created_by,
         created_date,
         modified_by,
         modified_date,
         registration_date)
    VALUES
        (student_id_seq.nextval,
         'Smith',
         11238,
         v_user,
         v_date,
         v_user,
         v_date,
         v_date);
END;

在PLSQL语句块中使用COMMIT,ROLLBACK和SAVEPOINT

BEGIN
    INSERT INTO student
        (student_id,
         last_name,
         zip,
         registration_date,
         created_by,
         created_date,
         modified_by,
         modified_date)
    VALUES
        (student_id_seq.nextval,
         'Tashi',
         10015,
         '01-JAN-99',
         'STUDENTA',
         '01-JAN-99',
         'STUDENTA',
         '01-JAN-99');
    SAVEPOINT a;
    INSERT INTO student
        (student_id,
         last_name,
         zip,
         registration_date,
         created_by,
         created_date,
         modified_by,
         modified_date)
    VALUES
        (student_id_seq.nextval,
         'Sonam',
         10015,
         '01-JAN-99',
         'STUDENTB',
         '01-JAN-99',
         'STUDENTB',
         '01-JAN-99');
    SAVEPOINT b;
    INSERT INTO student
        (student_id,
         last_name,
         zip,
         registration_date,
         created_by,
         created_date,
         modified_by,
         modified_date)
    VALUES
        (student_id_seq.nextval,
         'Norbu',
         10015,
         '01-JAN-99',
         'STUDENTB',
         '01-JAN-99',
         'STUDENTB',
         '01-JAN-99');
    SAVEPOINT c;
    ROLLBACK TO b;
END;

单个PLSQL包含多个事务:

DECLARE
    v_counter NUMBER;
BEGIN
    v_counter := 0;
    FOR i IN 1 .. 100
    LOOP
        v_counter := v_counter + 1;
        IF v_counter = 10
        THEN
            COMMIT;
            v_counter := 0;
        END IF;
    END LOOP;
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值