DCL/DML/DDL及动态SQL语句

本文详细介绍了SQL语法规则及其在数据库操作中的应用,包括动态SQL、DDL、DML和DCL的使用方法。重点阐述了如何通过动态SQL进行DDL、DML和DCL操作,以及如何处理无占位符、带占位符和包含return子句的DML语句。同时,文章还深入讨论了DCL操作对象的权限管理。内容涵盖了SQL语言的基础知识、常见操作和安全性控制,对于数据库管理与开发人员具有较高的实践价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /*
 1.动态SQL的概念
 动态SQL是指在运行PL/SQL块时动态输入SQL语句。在PL/SQL块中只能执行DDL(create、alter、drop)、DCL
 (grant、revoke)或比较灵活的SQL语句(如select子句不带where条件);
 动态SQL的性能不如静态SQL,但是比较灵活;
 在PL/SQL块中编写动态SQL语句时需要将SQL语句存放到字符串变量中而且SQL语句可以包含占位符(以冒号开始);
 

2.动态SQL的语法
 2.1 使用execute immediate语句
 可以处理多数动态SQL操作如:DDL语句(create、alter、drop)、DML语句(insert、update、delete)、DCL(grant、revoke)
 以及单行的select子句;但是不能处理多行查询语句。
 

2.2 使用open...for,fetch和close语句
 
在游标中使用。
 

2.3 使用批量动态SQL语句
 
*/
 

1、DDL
      1-1、DDL的概述
               DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括 数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Alter可以更改该表的字段,Drop可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数据进行操作。
 
      1-2、DDL的主要语句(操作)
               Create语句:可以创建数据库和数据库的一些对象。
               Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
               Alter语句:修改数据表定义及属性。
      1-3、DDL的操作对象(表)
               1-3-1、表的概念
                           表的创建就是用来存放数据用的,由于我们存放的数据的不通,所以我们需要定义些数据类型,以方便管理。
               1-3-2、表的属性  www.2cto.com  
                           主键属性:主键就是主键约束,只不过起的名字不同了,主键的起名偏向于虚的(就是描述描述这件事),主键约束起名偏向于实得(就是描述操作的实施),描述的都是同一件事,主键约束就是表中的一个属性;在一个表中最多可以有一个主键;一个主键可以定义在一个或多个字段;主键使一个或多个字段的值必须唯一且不为空,这样做可以通过该字段或该组字段中的值唯一的代表一条记录。
                           唯一属性:一个表中只能有一个主键属性,为了方表用户,提出唯一约束;唯一约束可以定义在一个或多个字段上;唯一约束使该字段或该组字段中的值唯一,可以为空,但是,不能重复。
                           外键属性:又叫外键,又叫外键约束,跟主键和主键约束的关系是一样的;外键约束针对的两个表,如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表,但要注意,必须要计算机要知道你是这种关系。
 
               核查、Null和缺省属性:核查属性又叫核查约束,Null属性又叫Null约束,缺省属性又叫缺省约束;这些名称是描述一件事,描述一种情况,这件事或这张情况我们当然可以人为的那样特意做(输入数据是注意就行),但是,他们的本意是实现自动化,也就是让计算机做这件事。
            (你知道为什么建立主键和唯一约束的时候,会自动的创建索引吗?而且是唯一索引,想一想索引大多在那些字段上用,以及索引的作用就会知道了。像主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束这些操作都是使表具有某些特性,所以在这里我认为他们都是表的属性。)
 
01:使用execute immediate处理DDL语句--create
 
declare
 create_table  varchar2(200);
 begin
 create_table:='create table ' ||'&table_name' ||'(sid int, sno int)';
 execute  immediate create_table  ;
 end;
02:使用execute immediate处理DDL语句---alter
 
declare
 alter_table  varchar2(200);
 begin
 alter_table:='alter table &target_table_name modify &column_name varchar2(10)';
 execute  immediate alter_table  ;
 end;
03:使用execute immediate处理DDL语句---drop
 
declare
 drop_table  varchar2(200);
 begin
 drop_table:='drop table ' ||'&target_table_name';
 execute  immediate drop_table  ;
 end;
04:使用execute immediate处理DDL语句--drop table
 
create or replace procedure drop_table (table_name varchar2)
 is 
sql_sta varchar2(200);
 begin
 sql_sta:='drop table ' ||table_name;
 execute immediate sql_sta;
 end;
 

--调用方法:
 exec drop_table('accp');
05:使用execute immediate处理DDL语句--create+select
 declare
 select_sta varchar2(200);
 emp_rec emp%rowtype;
 begin
 execute immediate
 'create table sodi(sid int, sno int)';
 select_sta:='select * from emp where empno=:id';
 execute  immediate select_sta  into emp_rec using &1;   /*使用占位符时,这个占位符是在引号内使用的*/
 end;

2、DML

      2-1、DML的概述
               DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
      2-2、DML的主要语句(操作)
               Insert语句:向数据表张插入一条记录。
               Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
               Update语句:用于修改已存在表中的记录的内容。
      2-3、DML的操作对象——记录
               2-3-1、注意
                           当我们对记录进行Insert、Delete和Update操作的时候,一定要注意,一定要清楚DDL对其的一些操作。
 
1.处理无占位符和return子句的DML语句
01:查询子句:select
 
declare
 sql_stat varchar2(100);
 begin
 sql_stat:='select * from emp';
 execute immediate sql_stat;
 end;
02:同时实现新建一个表并插入数据--create+insert+update+delete
 declare
 create_table  varchar2(200);
 insert_table varchar2(200);
 update_table varchar2(200);
 delete_table varchar2(200);
 begin
 create_table:='create table &table_name (sid int, sno int)';
 execute  immediate create_table  ;
 insert_table:='insert into &table_name values (&sid, &sno)';
 execute immediate insert_table;
 update_table:='update &table_name set &column_name=&new_value where sid=&old_value';
 execute immediate update_table;
 delete_table:='delete from &delete_tablename';
 execute immediate delete_table;
 end;
 
2.处理占位符的DML语句
01:处理占位符的DML语句:create+update+insert+delete
 
declare
 create_table  varchar2(200);
 insert_table varchar2(200);
 update_table varchar2(200);
 delete_table varchar2(200);
 begin
 create_table:='create table &table_name (sid int, sno int)';
 execute  immediate create_table  ;
 
insert_table:='insert into &target_table_name values (:sid, :sno)';
 execute immediate insert_table using  &1,&2;
 
update_table:='update &update_tablename set &update_column_name=:new_value where &update_condition_column=:delete_condition_column_value ';
 execute immediate update_table using &3 ,&4;
 
delete_table:='delete from &dele_table_name where &delete_condition_column=:delete_condition_column_value';
 execute immediate delete_table using &5;
 end;
3.处理包含returning子句的DML语句
 01:处理包含returning子句的DML语句--create+insert+update
 declare
 create_table varchar2(200);
 insert_table varchar2(200);
 update_table varchar2(200);
 res varchar2(100);
 begin
 create_table:='create table &new_table_name (sid int, sno int)';
 execute immediate create_table;
 insert_table:='insert into &insert_target_table_name values (:sid, :sno)';
 execute immediate insert_table using &1,&2 ;
 update_table:='update &update_target_table_name set &udpate_column_name=:new_value where &condition_column_name=:old_value  returning &returning_name into :res';
 execute immediate update_table using &3,&4
 returning into res;
 dbms_output.put_line('the result is : ' ||res);
 end;

3、DCL
       3-1、DCL的概述
                DCL(Data Control Language 数据控制语句)的操作是数据库对象的权限,这些操作的确定使数据更加的安全。
       3-2、DCL的主要语句(操作)
                Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
                Revoke语句:可以废除某用户或某组或所有用户访问权限
       3-3、DCL的操作对象(用户)
                此时的用户指的是数据库用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值