过程中的参数后面的'%TYPE'是什么意思?

时间:2019-08-02 17:44:43

标签: oracle plsql

我是PL / SQL的新手,并尝试了在线搜索,但无济于事-我们将不胜感激!

我正在寻找一种与此类似的程序:

PROCEDURE pProcedureOne
(pDateOne              DATE,
 pDateTwo              tableA.DateTwo%TYPE,
 pDateThree            tableB.DateThree%TYPE,
 pTypeOne              tableC.TypeOne%TYPE,
 pTestId               tableD.TestIdentifier%TYPE DEFAULT NULL,
 pShouldChange BOOLEAN DEFAULT FALSE)
IS

在这种情况下,'%TYPE'关键字是什么意思?

4 个答案:

答案 0 :(得分:3)

tableA.DateTwo%TYPE的意思是“ DateTwo表中tableA列的数据类型”。您会在文档中看到这种称为“锚定类型”的

出于几个原因,使用锚定类型非常有用

  1. 如果表的数据类型发生更改,则代码将自动使用新的数据类型进行编译。这消除了以下问题:例如,表中的varchar2(100)列后来被修改以允许varchar2(255),并且您必须浏览数十或数百种引用该列的方法以确保其局部变量更新到足够长的时间。
  2. 它记录了您希望将哪些数据传递给过程或供局部变量引用的数据。在大型系统中,通常至少会有一些概念的名称非常相似,但代表的概念略有不同。如果您查看具有参数tableA.DateTwo%TYPE的过程,那么如果有不同的DateTwoPrime列表示稍有不同的日期,则该信息将非常有用。

答案 1 :(得分:1)

%TYPE表示不必定义字段类型,因为它将从字段的类型继承它。

因此pDateTwo不需要自己的类型定义,因为它必须与tableA.DateTwo具有相同的类型。

答案 2 :(得分:1)

这意味着使用您要引用的table.column的数据类型。因此,例如,如果tableC.TypeOne为VARCHAR2(10),则这是分配给pTypeOne的数据类型。

答案 3 :(得分:1)

这意味着pDateTwo的数据类型将与tableA.DateTwo的数据类型相同。