:在查询语言中

时间:2016-03-16 12:55:25

标签: sql oracle

我正在阅读Joe Celko的树和层次结构在SQL中的Smarties (2012),并且遇到了我不熟悉的SQL语法:

SELECT * 
FROM Personnel_OrgChart 
WHERE path_string LIKE 
    (SELECT path_string 
     FROM Personnel_OrgChart 
     WHERE emp_id = :parent_emp_id) 
| | ‘%’;

查询的目标是选择父级的下级。引用表Personnel_OrgChart的结构是:

+----------+--------+-------------+
| emp_name | emp_id | path_string |
+----------+--------+-------------+
| Bonnie   | A      | A           |
+----------+--------+-------------+

对于完整的上下文,引用的解释是:

  

子查询将使用emp_id列上的索引来查找   路径字符串的“前部”从根到父与谁   我们很担心。 (第37页)。

什么是:,是否与表中未找到parent_emp_id有关? parent_emp_id来自哪里?

2 个答案:

答案 0 :(得分:6)

如果您的意思是Oracle,它是bind variable,您可以在documentation中详细了解它。基本上它只是输入变量的占位符。

例如,给定INSERT语句

INSERT INTO emp VALUES
    (:empno, :ename, :job, :sal, :deptno)

以及以下变量声明

text     *ename, *job;
sword    empno, sal, deptno;

答案 1 :(得分:3)

这是主变量

DB2上的COBOL示例

MOVE '000110' TO EMPID. 
EXEC SQL 
    SELECT LASTNAME 
    INTO :PGM-LASTNAME 
    FROM CORPDATA.EMPLOYEE 
    WHERE EMPNO = :EMPID 
END-EXEC.
DISPLAY "Employee name is " PGM-LASTNAME 

官方文件:https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_refs2hostvars.dita