我可以使用一个函数,它使用“=>”获取参数语法,在视图中?

时间:2011-12-13 22:34:09

标签: oracle plsql

我有一个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

我将语句简化为仅使用dual来使其更容易重现。我将使用线性几何形状的表格,而不是“SELECT ... FROM DUAL”,以及一种从线上拉出一个点以用于psc1的方法。

使用sqldeveloper的测试语法时出现的错误是

Error(s) parsing SQL: Unexpected token at 45 near =>.

第一个“=>”字符串中有45个字符,所以我认为在创建视图中使用它只是无效的。

我非常确定我可以通过创建一个不使用此“=>”的函数来解决这个问题。语法,但希望有一种方法直接从创建视图调用这个oracle函数。

编辑:所以看来sqldeveloper / sqlplus支持命名参数之类的东西。我在命名参数(/ * named_pa​​ram => * /)周围添加了注释,以停止使用命名参数语法。现在它只是一个“错误的数字或类型的参数”错误。不幸的是,我将所有参数按照Oracle在线文档(来自http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_util.htm#BJEGCCDF)中显示的确切顺序排列。所以我想这就成了如何为函数参数找到正确顺序的问题。

1 个答案:

答案 0 :(得分:5)

是的,你可以,但仅限Oracle 11G。在此之前,任何SQL语句中都只允许使用位置表示法,其中包括视图定义。