1、PL/SQL:
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。MySQL 不支持 PL/SQL ,但支持Navicat Premium。
PL/SQL是一种块结构的语言。
举例:
--需求:从控制台输入一个数字表示分数,如果这个分数小于60,不及格,。。。。
declare
v_score number := &请输入分数;
begin
if v_score<60 then
dbms_output.put_line('不及格');
elsif v_score<=80 then
dbms_output.put_line('及格');
elsif v_score<=100 then
dbms_output.put_line('优秀');
end if;
end ;
-----------------------------------
declare
v_score number := &请输入分数;
begin
case
when v_score < 60 then
dbms_output.put_line('不及格');
when v_score <= 80 then
dbms_output.put_line('及格');
when v_score < 100 then
dbms_output.put_line('优秀');
end case;
end;
--需求:从控制台输入一个雇员的编号,查询这个雇员,如果工资大于5000,控制台显示高工资。。。
declare
v_id employees.employee_id%type := &请输入雇员编号;
v_salary employees.salary%type;
begin
select s.salary
into v_salary
from employees s
where s.employee_id = v_id;
if v_salary >= 5000 and v_salary <= 25000 then
dbms_output.put_line('可以' || v_salary);
else
dbms_output.put_line('不合理' || v_salary);
end if;
end;
--需求:向某表一次性插入1000条数据,id自动增长,name固定,格式如:name1 name2...
------循环语句
create table lanqiao(
id number(10,2) primary key,
name varchar2(100)not null
)
select *from lanqiao;
declare
v_id number := 1;
begin
while v_id <= 1000 loop
insert into lanqiao values (v_id, '羊永兵' || v_id);
v_id := v_id + 1;
end loop;
commit;
end;
select *from lanqiao;
--for循环
begin
for v_id in 1 .. 1000 loop
insert into lanqiao values (v_id, '后绍园' || v_id);
end loop;
commit;
end;
--回滚
truncate table lanqiao;
select *from lanqiao;
--for循环操作多条数据
--输入部门编号,查询相关雇员信息,控制台显示每个人的薪水和级别(高工资和低工资级别)
declare
v_dept_id employees.department_id%type := &请输入部门编号;
begin
--select *from employees s where s.department_id= v_dept_id;--返回多条记录
for v_row in (select * from employees s where s.department_id = v_dept_id) loop
if v_row.salary >= 5000 and v_row.salary <= 25000 then
dbms_output.put_line('可以' || v_row.salary);
else
dbms_output.put_line('不合理' || v_row.salary);
end if;
end loop;
end;
-------------------------
--需求:从控制台输入一个雇员的编号,查询这个雇员,如果工资大于5000,控制台显示高工资。
---定义一个变量,代表一行数据
declare
v_id employees.employee_id%type := &请输入雇员编号;
v_row employees%rowtype;
begin
select * into v_row from employees s where s.employee_id = v_id;
if v_row.salary >= 5000 and v_row.salary <= 25000 then
dbms_output.put_line('可以' || v_row.salary);
else
dbms_output.put_line('不合理' || v_row.salary);
end if;
end;
2、PL/SQL中动态执行SQL语句:
在PL/SQL程序开发中,可以使用DMAL语句和事物控制语句,但是还有很多语句(比如DDL语句)不能直接在PL/SQL中执行。这些语句可以使用动态SQL来实现。
PL/SQL块先编译后再执行,动态SQL语句在编译时不能确定,只有在程序执行时把SQL语句作为字符串的形式由动态SQL命令来执行。在编译阶段SQL语句作为字符串存在,程序不会对字符串中的内容进行编译,在运行阶段再对字符串中的SQL语句进行编译和执行,动态的语法是:
---尝试一下创建表
begin
--再PL/SQL中不能直接执行ddl语句
create table lanqiao_test(
id varchar2(32) primary key,
name varchar2(50)
)
end;
declare
v_sql varchar2(500);
begin
v_sql :='truncate table lanqiao';--动态执行SQL
execute immediate v_sql;
end;