通过执行
select * from openquery(XXXX,'select * from YYYYY.abc')
where year_month='201405'
时出现
“ora-01652:无法通过256(在表空间temp中)扩展temp段”
请问大神们如何解决?
离题了
错误提示的意思是该查询需要使用临时表空间,但是临时表空间满了且无法扩展,所以查询执行不下去了,报错。造成这一错误的原因基本上是: 查询所涉及的数据较大,临时空间较小且不能扩展。
所以,解决方法是:
1) 修改查询语句,将openquery的结果限制在有限范围内(没有实测过,想想应该是这样的吧)
2) 修改Oracle数据库设置,扩大临时表空间
SQL Server中execute可以传入参数调用连接数据库的查询,格式如下:
execute ('select * from table_name where field_1 = ? and field_2 = ?', parameter_value_1, parameter_value_2) at linked_database其中,execute的第一个参数是连接数据库中查询语句,必须是目标数据库的语法,这里就是Oracle数据库的查询;field_1 = ?中的问号则是代表需要使用一个传入参数,必须在查询语句之后的参数中填写此参数值,就是parameter_value_1; 最后, at linked_database则指定在哪个连接数据库上执行。
所以,可以这样查询:
execute ('select * from YYYY.abc where year_month = ?', '201405') at XXXX'201405'可以换成SQL Server的变量,如@yearMonth.
追问谢谢大神,大神有办法把日期条件放在openquery么
你可以直接将条件year_month放到openquery的查询语句中去的,但是无法将此查询条件参数化(指的是用SQL Server变量, 如此例中只能固定写成201405)。
select * from openquery(XXXX, 'select * from YYYY.abc where year_month=''201405''')查询字符串中的单引号需要用两个单引号表示。
本回答被提问者和网友采纳那样语法错误了