该脚本在“Oracle PL/SQL for Professionals”一书中介绍:
PROCEDURE explain_joke (main_category_in IN joke_category.category_id%TYPE)
IS
/*
|| Курсор со списком параметров, состоящим
|| из единственного строкового параметра.
*/
CURSOR joke_cur (category_in IN VARCHAR2)
IS
SELECT name, category, last_used_date
FROM joke
WHERE category = UPPER (category_in);
joke_rec joke_cur%ROWTYPE;
BEGIN
/* Теперь при открытии курсора ему передается аргумент */
OPEN joke_cur (main_category_in)
请解释为什么在为过程中的参数声明类型时指定explain_joketable.column ( )。joke_category.category_id
这是一个错误还是允许这个变量声明?
这不是一个错误。%TYPE属性是 PL/SQL 语法的一部分。
它允许您声明具有与先前声明的变量或表列相同的数据类型的常量、变量或子例程参数,而无需确切知道该数据类型是什么。
如果被引用元素的声明改变了,那么引用元素的声明也会相应改变。
例如:
如果是这样: