各位高手初学数据库不久,遇到一个问题,不知道如何解决。我现在想把Oracle里的一个存储过程改写到pg下,在Oracle中,存储过程的输入参数类型(in CUR_SYS_REP_CONTENT)是在包中定义的,如下代码
TYPE REC_SYS_REP_CONTENT IS RECORD (id          test_content.id%TYPE,
                                    content     test_content.content%TYPE);TYPE CUR_SYS_REP_CONTENT IS REF CURSOR RETURN REC_SYS_REP_CONTENT;首先我不太确定这段代码是什么意思?是不是先等价于把一个表type为一个数据类型,然后把一个refcursor游标type为一个数据类型,返回之前定义的这个数据类型的值。可是这个定义游标和返回之前定义数据类型的语句我在pg下怎么尝试都不成功,谢谢各位高手帮忙赐教,小弟不胜感激!

解决方案 »

  1.   

    oracle 很强大,上面代码语法是自定义类型,通过游标返回记录。pg不是很清楚,看看只不支持UDF
      

  2.   

    TYPE REC_SYS_REP_CONTENT IS RECORD (id          test_content.id%TYPE, 
                                        content    test_content.content%TYPE); TYPE CUR_SYS_REP_CONTENT IS REF CURSOR RETURN REC_SYS_REP_CONTENT; -----------------------------------
    定义一个记录类型,定义一个游标类型,返回这个记录类型主要是oracle里面不支持直接返回结果集,所以,通过你上面的语法来进行处理达到存储过程返回结果集的效果,如果pg下直接存储过程直接返回结果的话,那直接在存储过程中select出表的结果返回就可以了(mysql存储过程是支持直接返回结果集的)
      

  3.   


    Oracle确实很强大,不过就是还不太会使。pg支持UDF,只是我刚才一直不明白那两个TYPE到底是做什么的,现在知道了,谢谢!
      

  4.   


    thank u!看了你的回复我明白了,就是写一个存储过程把结果集返回是同样的效果吧!Oracle没好好学过,就知道一些大概的语法。在麻烦你告诉我一下,怎么把分数给你,我第一次发帖,呵呵。
      

  5.   


    谢谢,我用的pg自己的TYPE语法,确实是不支持这么定义,第一个type还可以把表定义成记录,第二个我就晕了。
      

  6.   


    真搞不懂你为什么一定要按这样的结构搞
    oracle那样搞目的是能让存储过程返回结果集(因为oracle的存储过程不支持直接返回结果集,所以通过这种方式来转换达到返回结果集的目的)
    如果pg支持存储过程返回结果集的话,直接在存储过程中select出结果,然后外面调用就行了嘛
      

  7.   


    呵呵,我表达不清,就是你说的这个意思。看了几个DBMS的语法,找一些题来熟悉,以后还是得多看看Oracle。能教教我怎么给分么?
      

  8.   


    霍霍,thanks,我结贴了。