我有一个select语句工作(没有语法错误并返回所需的结果),但是当我尝试在视图中使用相同的select语句时出现错误.我认为它与"=>"有关,以命名参数.
select SDO_UTIL.AFFINETRANSFORMS(
geometry => STRTS.GEOMETRY,
translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0,
scaling => 'TRUE', psc1 =>
MDSYS.SDO_GEOMETRY( 3001, NULL, SDO_POINT_TYPE( 0, 0, 0 ), NULL, NULL),
sx => 0.8, sy => 0.8, sz => 0.8,
rotation => 'FALSE', p1 => NULL,
line1 => NULL, angle => 10.0, dir => 2,
shearing => 'FALSE', shxy => 0.0,
shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0,
reflection => 'FALSE', pref => NULL, lineR => NULL, dirR => 0,
planeR => 'FALSE', n => NULL, bigD => NULL ) AS GEOMETRY
FROM (
SELECT
MDSYS.SDO_GEOMETRY(3002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(-90, 30, 0, -90, 30, 0))
as GEOMETRY
FROM DUAL ) STRTS
Run Code Online (Sandbox Code Playgroud)
我将语句简化为仅使用双重来使其更容易重现.我将使用线性几何形状的表,而不是"SELECT ... FROM DUAL",以及从线上拉出一个点以用于psc1的方法.
我使用sqldeveloper的测试语法时得到的错误是
Error(s) parsing SQL: Unexpected token at 45 near =>.
Run Code Online (Sandbox Code Playgroud)
第一个"=>"是字符串中的45个字符,因此我认为在创建视图中使用它只是一些无效的东西.
我很确定我可以通过创建一个不使用这个"=>"语法的函数来解决这个问题,但希望有一种方法可以直接从create视图调用这个oracle函数.
编辑:所以看来sqldeveloper/sqlplus支持命名参数之类的东西.我在命名参数(/*named_param =>*/)周围添加了注释,以停止使用命名参数语法.现在它只是一个"错误的数字或类型的参数"错误.不幸的是,我将所有参数按照Oracle在线文档中显示的确切顺序排列(来自http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_util.htm#BJEGCCDF).所以我想这就成了如何为函数参数找到正确顺序的问题.