-- Start
什么是动态 SQL 呢?它是运行时才动态拼接和执行的 SQL。相对于静态 SQL,它最大的优势就是灵活,可以执行 DDL 语句。缺点是它没有经过预编译,运行时可能由于拼接错误、权限等问题失败。我们可以通过下面两种方式执行动态 SQL。
EXECUTE IMMEDIATE
-- 创建测试表
CREATE TABLE student
(
id number(10),
name varchar2(20)
);
-- 创建测试存储过程
CREATE OR REPLACE PROCEDURE insert_student
(
id IN OUT student.id%TYPE,
name student.name%TYPE
) IS
max_id student.id%TYPE;
BEGIN
select max(id) into max_id from student;
if id <= max_id then
id := max_id + 1;
end if;
insert into student values (id, name);
END;