暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基本 SQL 语句

原创 yfn 2022-05-02
414

本章假定使用标量主机变量。

您可以在以下嵌入式 SQL 语句中查询和操作 Oracle 数据:

嵌入式 SQL 语句描述

SELECT

从一个或多个表中返回行。

INSERT

向表添加新行。

UPDATE

更改表中的行。

DELETE

从表中删除不需要的行。

显式游标的定义和操作在以下嵌入式 SQL 语句中完成:

嵌入式 SQL 语句描述

DECLARE

命名游标并关联查询。

OPEN

运行查询以确定活动集。

FETCH

移动光标以逐个检索活动集中的每行。

CLOSE

禁用游标(未定义活动集)。

以下各节首先介绍如何编写插入、更新、删除和单行选择语句。 接下来,我们将介绍如何使用多行 SELECT 语句。


SELECT 语句

查询数据库是一种日常的 SQL 过程。 使用 SELECT 语句发出查询。 下面的示例查询 EMP 表。

EXEC SQL SELECT ename, job, sal + 2000 
INTO :emp_name, :job_title, :salary 
FROM emp 
WHERE empno = :emp_number; 

关键字 SELECT 后面的列名称和表达式创建选择列表。 示例选择列表包含三个项目。 在 WHERE 子句(如果存在,则为后续子句)中指定的条件下,Oracle 将列值返回到 INTO 子句的主机变量。

选择列表中的项数与 INTO 子句中的主机变量数相同,并且有一个存储所有返回值的位置。

最简单的示例是,如果查询仅返回一行,则格式应类似于前面的示例。 但是,如果在单个查询中返回多行,则必须使用游标提取这些行,或将这些行 SELECT 放入主机变量数组中。 本章稍后将介绍光标和 FETCH 语句。 

如果创建仅返回一行的查询实际上返回多行,则 SELECT 的结果是不可预知的。 这是否是错误的原因取决于指定SELECT_ERROR选项的方式。 如果默认值为“是”,则返回多行将导致错误。

可用子句

在 SELECT 语句中,以下所有标准 SQL 子句

您可以使用它。

  • INTO

  • FROM

  • WHERE

  • CONNECT BY

  • START WITH

  • GROUP BY

  • HAVING

  • ORDER BY

  • FOR UPDATE OF

除 INTO 子句外,嵌入式 SELECT 语句可以使用 SQL_Plus 以交互方式执行和测试。 SQL_Plus 使用替换变量或常量而不是输入主机变量。

插入语句

可以使用 INSERT 语句向表或视图添加行。 下面的示例向 EMP 表添加一行。

EXEC SQL INSERT INTO emp (empno, ename, sal, deptno) 
VALUES (:emp_number, :emp_name, :salary, :dept_number); 

列列表中的每个列都必须包含在 INTO 子句中指定的表中。 VALUES 子句指定要插入的行的值。 这些值可以是常量、主机变量、SQL 表达式、SQL 函数(USER、SYSDATE 等)或用户定义的 PL/SQL 函数。

VALUES 子句中的值数必须等于列列表中的名称数。 但是,如果 VALUES 子句按表中定义的顺序为表中的每个列指定了所有值,则可以省略此列列表。


如何使用子查询

子查询是嵌套的 SELECT 语句。 您可以使用子查询执行多部分搜索。 子查询可用于:

  • 指定用于在“选择”、“更新”和“删除”语句的“发送”和“开始”子句中进行比较的值。

  • 定义要通过创建表或插入语句插入的行集。

  • 为更新语句的 SET 子句定义值。

下面的示例使用 INSERT 语句中的子查询将行从一个表复制到另一个表。

EXEC SQL INSERT INTO emp2 (empno, ename, sal, deptno) 
SELECT empno, ename, sal, deptno FROM emp  
WHERE job= :job_title ;

此 INSERT 语句使用子查询来获取中间结果。

更新语句

可以使用 UPDATE 语句更改表或视图中指定列的值。 下面的示例更新表中的列和列。EMPSALCOMM

EXEC SQL UPDATE emp 
SET sal = :salary, comm = :commission 
WHERE empno = :emp_number;

SET 子句是必须指定值的一个或多个列的名称序列。 可以使用子查询指定值,如以下示例所示:

EXEC SQL UPDATE emp 
SET sal = (SELECT AVG(sal)*1.1 FROM emp WHERE deptno = 20) 
WHERE empno = :emp_number; 

与插入和删除语句一样,更新语句可以选择指定子句。 只能在可选 WHERE 条件之后指定。RETURNING


DELETE文

可以使用“删除”语句从表或视图中删除行。 下面的示例从 EMP 表中删除指定部门中的所有员工。

EXEC SQL DELETE FROM emp 
WHERE deptno = :dept_number ; 

使用可选的 WHERE 子句指定删除行的条件。

RETURNING子句选项也可用于删除语句。 它可以在可选的 WHERE 条件之后指定。 在前面的示例中,建议提前记录要删除的每个员工的字段值。


WHERE 子句

WHERE 子句允许您仅选择、更新或删除满足表或视图中搜索条件的行。 WHERE 子句中的搜索条件是布尔表达式,可以包含标量主机变量、主机数组(SELECT 语句除外)、子查询和用户定义的存储函数。

如果省略 WHERE 子句,则处理表或视图中的所有行。 如果在更新或删除语句中省略 WHERE 子句,Oracle 会将 SQLCA 设置为“W”,以指示已处理所有列。sqlwarn[4]

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论