使用Sybase IQ 12.5,
当我尝试将存储过程的结果插入到这样的表中时:
INSERT mytable (column1, column2, column3)
SELECT column1, column2, column3
FROM (myproc('AAA'))
我得到以下内容:
ASA Error -1001042: Table, 'mytable', is not accessible in this context.
Sybase网站has no further explanation
答案 0 :(得分:1)
您可以发布存储过程的定义吗?下面的测试对我来说是成功的,尽管我使用的是Sybase SQL Anywhere(我尝试过12.0.1和11.0.1版)。 Sybase IQ服务器基于SQL Anywhere执行引擎,因此这应该是一个等效的测试,但我不确定哪个版本的SQL Anywhere对应于IQ 12.5。
create table mytable (column1 int, column2 int, column3 int);
create procedure myproc( parm varchar(10))
result ( column1 int, column2 int, column3 int)
begin
select 1,2,3;
end;
INSERT mytable (column1, column2, column3)
SELECT column1, column2, column3
FROM (myproc('AAA'));
完全披露:我在SQL Anywhere工程中为Sybase工作。
答案 1 :(得分:1)
问题是由我的目标表有一个检查约束引起的。
以下是重新创建问题的示例:
create table mytable (column1 int,
column2 int,
column3 int CHECK (column3 in (1,2,3)));
create procedure myproc( parm varchar(10))
result ( column1 int, column2 int, column3 int)
begin
select 1,2,3;
end;
INSERT mytable (column1, column2, column3)
SELECT column1, column2, column3
FROM (myproc('AAA'));