Oracle PL/SQL 插入、更新、删除和选择 [示例]
在本教程中,我们将学习如何使用 SQL 在 PL/SQL 中。SQL 是负责获取和更新数据库中数据的实际组件,而 PL/SQL 是处理这些数据的组件。此外,在本文中,我们还将讨论如何在 PL/SQL 块中组合 SQL。
PL/SQL 中的 DML 事务
DML 代表 数据处理语言。这些语句主要用于执行操作活动。它处理以下操作。
- 数据插入
- 资料更新
- 资料删除
- 数据选择
在PL/SQL中,我们只能使用SQL命令来进行数据操作。
数据插入
在 PL/SQL 中,我们可以使用 SQL 命令 INSERT INTO 将数据插入任何表中。此命令将以表名、表列和列值作为输入,并将值插入基表中。
INSERT 命令还可以使用“SELECT”语句直接从另一个表中获取值,而不是为每个列提供值。通过“SELECT”语句,我们可以插入与基表包含的行数相同的行数。
语法:
BEGIN INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>) VALUES(<valuel><value2>,...:<value_n>); END;
- 上述语法显示了 INSERT INTO 命令。表名和值是必填字段,而如果插入语句包含表的所有列的值,则列名不是必填字段。
- 如果像上面所示的那样单独给出值,则关键字“VALUES”是必需的。
语法:
BEGIN INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>) SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>; END;
- 上面的语法显示了 INSERT INTO 命令直接从使用 SELECT 命令。
- 在这种情况下,不应出现关键字“VALUES”,因为没有单独给出值。
资料更新
数据更新只是意味着更新表中任何列的值。这可以使用“UPDATE”语句来完成。此语句将表名、列名和值作为输入并更新数据。
语法:
BEGIN UPDATE <table_name> SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- 上述语法显示了 UPDATE。关键字 'SET' 指示 PL/SQL 引擎使用给定的值更新列的值。
- 'WHERE' 子句是可选的。如果没有给出此子句,则整个表中提到的列的值将被更新。
资料删除
数据删除是指从数据库表中删除一条完整的记录。“DELETE”命令可用于此目的。
语法:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- 以上语法显示了 DELETE 命令。关键字“FROM”是可选的,无论是否带有“FROM”子句,该命令的行为方式都相同。
- 'WHERE' 子句是可选的。如果没有给出此子句,则将删除整个表。
数据选择
数据投影/提取意味着从数据库表中检索所需的数据。这可以通过使用带有“INTO”子句的“SELECT”命令来实现。“SELECT”命令将从数据库中获取值,“INTO”子句将这些值分配给 PL/SQL 块.
以下是在‘SELECT’语句中需要考虑的要点。
- 使用“INTO”子句时,“SELECT”语句应仅返回一条记录,因为一个变量只能保存一个值。如果“SELECT”语句返回多个值,则会引发“TOO_MANY_ROWS”异常。
- 'SELECT' 语句会将值赋给 'INTO' 子句中的变量,因此它需要从表中获取至少一条记录来填充该值。如果没有获取任何记录,则会引发 'NO_DATA_FOUND' 异常。
- ‘SELECT’子句中的列数及其数据类型应与‘INTO’子句中的变量数及其数据类型相匹配。
- 值的获取和填充顺序与语句中提到的顺序相同。
- “WHERE”子句是可选的,允许对要获取的记录进行更多限制。
- 'SELECT' 语句可用于其他 DML 语句的 'WHERE' 条件中来定义条件的值。
- 使用“INSERT”、“UPDATE”、“DELETE”语句时的“SELECT”语句不应有“INTO”子句,因为在这些情况下它不会填充任何变量。
语法:
BEGIN SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
- 上述语法显示了 SELECT-INTO 命令。关键字“FROM”是必需的,它标识需要从中获取数据的表名。
- 'WHERE' 子句是可选的。如果没有给出此子句,则将获取整个表中的数据。
例子1:在此示例中,我们将了解如何在 PL / SQL. 我们将把以下四条记录插入到 emp 表中。
EMP_NAME | 雇员编号 | 薪金 | 经理 |
---|---|---|---|
BBB | 1000 | 25000 | AAA |
XXX | 1001 | 10000 | BBB |
YYY | 1002 | 10000 | BBB |
ZZZ | 1003 | 7500 | BBB |
然后我们要把‘XXX’的工资更新为15000,并且我们要删除员工记录‘ZZZ’。最后我们要把员工‘XXX’的详细信息投影出来。
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES(‘BBB’,1000,25000,’AAA’); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,’BBB); INSERT INTO emp(emp_name,emp_no,salary,managed VALUES(‘YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES(‘ZZZ',1003,7500,'BBB'): COMMIT; Dbms_output.put_line(‘Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line(‘Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT: Dbms_output.put_line('Values Deleted ); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms output.put line(‘Employee Detail’); Dbms_output.put_line(‘Employee Name:‘||l_emp_name); Dbms_output.put_line(‘Employee Number:‘||l_emp_no); Dbms_output.put_line(‘Employee Salary:‘||l_salary); Dbms output.put line(‘Emplovee Manager Name:‘||l_manager): END; /
输出:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
代码说明:
- 代码行 2-5:声明变量。
- 代码行 7-14:将记录插入到emp表中。
- 代码行 15:提交插入事务。
- 代码行 17-19:将员工‘XXX’的工资更新为15000
- 代码行 20:提交更新事务。
- 代码行 22:删除‘ZZZ’的记录
- 代码行 23:提交删除事务。
- 代码行 25-27:选择‘XXX’记录并填充到变量l_emp_name、l_emp_no、l_salary、l_manager中。
- 代码行 28-32:显示获取的记录值。