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是一种块结构的语言。

mysql支持信创吗 mysql支持pl/sql吗_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语句进行编译和执行,动态的语法是:

mysql支持信创吗 mysql支持pl/sql吗_mysql支持信创吗_02

---尝试一下创建表
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;