烟台食品公司中企动力提供网站建设,南昌房产网站建设,南希网站建设,备案通一、PL / SQL中检索数据
#xff08;1#xff09;PL / SQL中的SQL语句可以在PL / SQL中使用以下几种SQL语句#xff1a;•SELECT从数据库检索数据。•DML语句#xff0c;例如INSERT#xff0c;UPDATE和DELETE#xff0c;以更改数据库中的行。•事务控制语句#xff0c;例…一、PL / SQL中检索数据
1PL / SQL中的SQL语句可以在PL / SQL中使用以下几种SQL语句•SELECT从数据库检索数据。•DML语句例如INSERTUPDATE和DELETE以更改数据库中的行。•事务控制语句例如COMMITROLLBACK或SAVEPOINT。 您使用事务控制语句对数据库进行更改/永久或丢弃它们。 事务控制语句将在本课程后面介绍。
本文包含SELECT语句。
2不能直接在PL / SQL中使用DDL和DCL。PL / SQL不直接支持数据定义语言DDL语句例如CREATE TABLEALTER TABLE或DROP TABLE以及DCL语句如GRANT和REVOKE。您不能直接执行DDL和DCL语句因为它们是在运行时构建和执行的。 也就是说它们是动态的。 静态SQL语句是编译程序时修复的语句。二、PL / SQL中的SELECT语句1用SELECT语句从数据库中检索数据
句法SELECT select_listINTO {variable_name [, variable_name ]...| record_name}FROM table[WHERE condition];INTO子句是强制性的发生在SELECT和FROM子句之间。 它用于指定保存SQL从SELECT子句返回的值的PL / SQL变量的名称。 您必须为每个选定的项目指定一个变量并且变量的顺序必须与所选项目相对应。DECLAREv_country_name wf_countries.country_name%TYPE;
BEGINSELECT country_name INTO v_country_nameFROM wf_countries WHERE country_id 359;DBMS_OUTPUT.PUT_LINE( The country name is :||v_country_name);
END;2在PL / SQL中检索数据检索指定员工的hire_date和薪水。
例
DECLAREv_emp_hiredate employees.hire_date%TYPE;v_emp_salary employees.salary%TYPE;
BEGINSELECT hire_date, salaryINTO v_emp_hiredate, v_emp_salaryFROM employeesWHERE employee_id 100;DBMS_OUTPUT.PUT_LINE(Hiredate is: || v_emp_hiredate|| and Salary is: || v_emp_salary);
END;PL / SQL块中的SELECT语句属于嵌入式SQL的ANSI分类适用以下规则
查询必须返回一行。 返回多行或无行的查询会生成错误。 您将在本课程后期学习错误处理。
DECLAREv_salary employees.salary%TYPE;
BEGINSELECT salary INTO v_salaryFROM employees;DBMS_OUTPUT.PUT_LINE( Salary is : || v_salary);
END;返回指定部门中所有员工的工资总额。
DECLAREv_sum_sal NUMBER(10,2);v_deptno NUMBER NOT NULL : 60;
BEGINSELECT SUM(salary) -- group functionINTO v_sum_sal FROM employeesWHERE department_id v_deptno;DBMS_OUTPUT.PUT_LINE (The sum of salary is || v_sum_sal);
END;
3在PL / SQL中检索数据的准则•用分号;终止每个SQL语句。•检索的每个值必须使用INTO子句存储在变量中。•WHERE子句是可选的可以包含输入变量常量文字或PL / SQL表达式。 但是应该只提取一行因此几乎在所有情况下都需要使用WHERE子句。•在INTO子句中指定与SELECT子句中的数据库列相同数量的变量。 确保它们的位置对应并且它们的数据类型是兼容的。
•使用TYPE声明接收变量。三、命名约定准则
1在可能不明确的SQL语句中数据库列的名称优先于局部变量的名称
DECLAREv_hire_date employees.hire_date%TYPE;employee_id employees.employee_id%TYPE : 176;
BEGINSELECT hire_dateINTO v_hire_dateFROM employeesWHERE employee_id employee_id;
END;
此示例引发未处理的运行时异常因为在WHERE子句中PL / SQL变量名称与employees表中的数据库列名称的名称相同。2在以下PL / SQL块中删除了什么
DECLARElast_name VARCHAR2(25) : King;
BEGINDELETE FROM emp_dup WHERE last_name last_name;
END;3命名约定准则•使用命名约定来避免WHERE子句中的歧义。•避免使用数据库列名作为标识符。•执行期间可能会发生错误因为PL / SQL会首先检查表中列的数据库。•局部变量和形式参数的名称优先于数据库表的名称在PL / SQL语句中。•数据库表列的名称优先于局部变量的名称。