建立类型
create or replace type emp_type as object
(
name varchar2(10),
salary number(6,2),
hiredate date
);建立嵌套表
create or replace type emp_array is table of emp_type;建立数据表
drop table department;
create table department
(
deptno number(2) primary key,
dname varchar2(10),
employee emp_array
)nested table employee store as employee;预编译参数
proc $(InputDir)\$(InputName) sqlcheck=full userid=scott/password@exam intype=$(InputDir)\demoout.typ include=$(InputDir)【出错代码段一】:
/* 定义宿主变量 */
emp_array* employee_array;
emp_type* employee[20];
int deptno;
char name[10];
char temp[10];
/* ... */
/* 输入deptno和name */
/* ... */
/* 集合列->对象高速缓存 */
exec sql select deptno , employee into :deptno , :employee_array
from department p , table(p.employee) e
where upper(e.name) = upper(:name);【proc给出的错误信息是】:
错误发生在行227, 列2, 文件.\demo16.pc
exec sql select deptno , employee into :deptno , :employee_array
.1
PLS-S-00201, 必须声明标识符 'P.EMPLOYEE'
错误发生在行227, 列2, 文件.\demo16.pc
exec sql select deptno , employee into :deptno , :employee_array
.1
PLS-S-00000, SQL Statement ignored
在第 227 行, 第 2 列, 文件 .\demo16.pc 有语义错误:
exec sql select deptno , employee into :deptno , :employee_array
.1【出错代码段二】:
/* 定义宿主变量 */
emp_array* employee_array;
emp_type employee[20];
emp_type* employee_temp;
int deptno;
char name[10];
char temp[10];
int salary;
char hiredate[20];
int count;
int i;
/* ... */
/* ... */
/* 取得元素属性 */
exec sql object get * from :employee[i] into :temp , :salary , :hiredate;【proc给出的错误信息是】:
PCC-S-02346, PL/SQL 发现语义错误
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 3 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..1
PCC-S-02413, 属性数与主机变量数不符代码是对着《精通Oracle 10g Pro*C/C++编程》(王海亮,张立民 中国水利水电出版社)这本书书敲的
刚入门,还请高人指点啊。
create or replace type emp_type as object
(
name varchar2(10),
salary number(6,2),
hiredate date
);建立嵌套表
create or replace type emp_array is table of emp_type;建立数据表
drop table department;
create table department
(
deptno number(2) primary key,
dname varchar2(10),
employee emp_array
)nested table employee store as employee;预编译参数
proc $(InputDir)\$(InputName) sqlcheck=full userid=scott/password@exam intype=$(InputDir)\demoout.typ include=$(InputDir)【出错代码段一】:
/* 定义宿主变量 */
emp_array* employee_array;
emp_type* employee[20];
int deptno;
char name[10];
char temp[10];
/* ... */
/* 输入deptno和name */
/* ... */
/* 集合列->对象高速缓存 */
exec sql select deptno , employee into :deptno , :employee_array
from department p , table(p.employee) e
where upper(e.name) = upper(:name);【proc给出的错误信息是】:
错误发生在行227, 列2, 文件.\demo16.pc
exec sql select deptno , employee into :deptno , :employee_array
.1
PLS-S-00201, 必须声明标识符 'P.EMPLOYEE'
错误发生在行227, 列2, 文件.\demo16.pc
exec sql select deptno , employee into :deptno , :employee_array
.1
PLS-S-00000, SQL Statement ignored
在第 227 行, 第 2 列, 文件 .\demo16.pc 有语义错误:
exec sql select deptno , employee into :deptno , :employee_array
.1【出错代码段二】:
/* 定义宿主变量 */
emp_array* employee_array;
emp_type employee[20];
emp_type* employee_temp;
int deptno;
char name[10];
char temp[10];
int salary;
char hiredate[20];
int count;
int i;
/* ... */
/* ... */
/* 取得元素属性 */
exec sql object get * from :employee[i] into :temp , :salary , :hiredate;【proc给出的错误信息是】:
PCC-S-02346, PL/SQL 发现语义错误
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 31 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..............................1
PCC-S-02326, 非法的结构引用操作
在第 306 行, 第 3 列, 文件 .\demo16.pc 有语义错误:
exec sql object get * from :employee[i] into :temp , :salary , :
hiredate;
..1
PCC-S-02413, 属性数与主机变量数不符代码是对着《精通Oracle 10g Pro*C/C++编程》(王海亮,张立民 中国水利水电出版社)这本书书敲的
刚入门,还请高人指点啊。
在Pro*C中调用PL/SQL的函数时(例如table函数),应该采用sqlcheck的默认值SYNTAX.
注意:只有sqlcheck=full时,才能在Pro*C中嵌入PL/SQL块,
所以如果同一工程还要内嵌PL/SQL块,只能内嵌到其他的PC源文件中,
不同的PC源文件可以采用不同的预编译选项.第二个问题是因为:
emp_array* employee_array;
emp_type employee[20];
emp_type* employee_temp;
以上变量声明有笔误:
emp_type employee[20];
应该写成
emp_type* employee[20];