Sql Oracle到DB2,如何实现

Sql Oracle到DB2,如何实现,sql,oracle,db2,Sql,Oracle,Db2,我得到了贝娄的质疑,首先,塞滕斯·贝娄的意思是什么: Create or replace FUNCTION GPRS7003( -->> In Parameters -- pe_sTexto VARCHAR2, pe_sDelimitador VARCHAR2 ) RETURN VARCHAR2 IS -->> Variáveis <<-- v_sRetorno VARCHAR2(32767);

我得到了贝娄的质疑,首先,塞滕斯·贝娄的意思是什么:

Create or replace FUNCTION GPRS7003(
    -->> In Parameters --
    pe_sTexto       VARCHAR2,
    pe_sDelimitador VARCHAR2
) RETURN VARCHAR2 IS

    -->> Variáveis <<--
    v_sRetorno VARCHAR2(32767);

    -->> Cursor de Seleção de Partições da Variável <<--
    CURSOR CUR_RETORNO_PARTICOES IS  
        SELECT DISTINCT(t.V_SCOLUNA) AS PARTICAO
          FROM (SELECT *
                  FROM TABLE(GPRSG001.GPRS7001(pe_sTexto,
                                               pe_sDelimitador))) t;

-->> Início - Função para Retornar Variável Particionada Distinta <<--
BEGIN
    -->> Passando pelo Cursor de Seleção de Partições da Variável <<--
    FOR c_retorno_particoes IN CUR_RETORNO_PARTICOES LOOP
        -->> Checando se é a Primeira Partição <<--
        IF (v_sRetorno IS NULL) THEN
            -->> Gerando a String de Retorno <<--
            v_sRetorno := c_retorno_particoes.PARTICAO;
        ELSE
            -->> Gerando a String de Retorno <<--
            v_sRetorno := (v_sRetorno || pe_sDelimitador || c_retorno_particoes.PARTICAO);
        END IF; -->> Fim - Checando se é a Primeira Partição <<--
    END LOOP; -->> Passando pelo Cursor de Seleção de Partições da Variável <<--
    -->> Retornando as Partições <<--
    RETURN v_sRetorno;
END GPRS7003;
创建或替换函数GPRS7003(
-->>在参数中--
佩斯泰克斯托·瓦尔恰尔2,
佩斯杜利米塔多·瓦尔查尔2
)返回VARCHAR2是

-->>瓦里瓦维是瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦里瓦Cursor de Seleço de Partiçes da Variável retronando as PartiçesesCURçu retronoçu particles循环中cçu retronoçu particles循环的句子
将为此查询中的每行运行(循环)一次:

SELECT DISTINCT(t.V_SCOLUNA) AS PARTICAO
  FROM (SELECT * FROM TABLE(GPRSG001.GPRS7001(pe_sTexto, pe_sDelimitador))) t;
在每次运行(循环)时,该行将通过名为
c\u retrono\u particoes的变量可用

因此,假设您要将每个
PARTICAO
值“打印”到控制台,您可以执行以下操作:

for c_retorno_particoes in CUR_RETORNO_PARTICOES LOOP
    dbms_output.put_line(c_retorno_particoes.PARTICAO);
end loop;

CUR_retrono_particles循环中c_retrono_particles的句子
将为此查询中的每一行运行(循环)一次:

SELECT DISTINCT(t.V_SCOLUNA) AS PARTICAO
  FROM (SELECT * FROM TABLE(GPRSG001.GPRS7001(pe_sTexto, pe_sDelimitador))) t;
在每次运行(循环)时,该行将通过名为
c\u retrono\u particoes的变量可用

因此,假设您要将每个
PARTICAO
值“打印”到控制台,您可以执行以下操作:

for c_retorno_particoes in CUR_RETORNO_PARTICOES LOOP
    dbms_output.put_line(c_retorno_particoes.PARTICAO);
end loop;

这与其说是一个答案,不如说是一个评论,但对于一个评论来说太长了

首先要看的是GPRSG001.GPRS7001。这是一个获取文本和分隔符并返回行的函数。我假设它返回的是单独的单词,即从文本
'abc def abc ghi'
和分隔符
'
中,它将获得值
'abc'
'def'
'abc'
,和
'ghi'

您正在显示的函数有一个光标,可以从上面选择不同的值,即
'abc'
'def'
'ghi'
。然后在一个循环中,它们再次与相同的分隔符组合,因此我们最终将使用
'abc def ghi'
(或
'ghi abc def'
或任何其他顺序,因为没有指定
order BY
子句)


Oracle的PL/SQL是一种与数据库密切协作的编程语言。我不认为DB2有这样的功能,但我实际上不知道。您可能需要编写一个递归查询来获取单个单词,然后使用
LISTAGG
将不同的单词组合成一个新字符串。

这与其说是答案,不如说是注释,但对于注释来说太长了

首先要看的是GPRSG001.GPRS7001。这是一个获取文本和分隔符并返回行的函数。我假设它返回的是单独的单词,即从文本
'abc def abc ghi'
和分隔符
'
中,它将获得值
'abc'
'def'
'abc'
,和
'ghi'

您正在显示的函数有一个光标,可以从上面选择不同的值,即
'abc'
'def'
'ghi'
。然后在一个循环中,它们再次与相同的分隔符组合,因此我们最终将使用
'abc def ghi'
(或
'ghi abc def'
或任何其他顺序,因为没有指定
order BY
子句)


Oracle的PL/SQL是一种与数据库密切协作的编程语言。我不认为DB2有这样的功能,但我实际上不知道。您可能需要编写一个递归查询来获取单个单词,并使用
LISTAGG
,然后将不同的单词组合成一个新字符串。

关于您在Db2中观察到的PL/SQL模拟的评论。你写道:

我不知道在CUR_retrono_particles中c_retrono_particles是什么意思 循环意味着,我也不知道光标中有巨大的背景

我曾尝试在DB2数据库中使用这个,但sintaxy没有 在DB2V11.1中识别。我还启用了ORA兼容性

PL/SQL游标的Oracle语法为:
用于游标名称循环中的记录…

这种语法在Oracle的

如果正确地启用了Oracle兼容性,Linux上的DB2V11.1将支持这种Oracle语法。如果您的安装拒绝使用这种Oracle语法,那么您的Db2配置一定犯了一些错误。一个常见的错误是,在创建DB2数据库之前,DB2_COMPATIBILITY_VECTOR=ORA变量无效


Db2目前并不支持Oracle语法中的所有内容,但这种形式的游标似乎得到了正确的模拟。

关于您在Db2中观察到的PL/SQL模拟的评论。你写道:

我不知道在CUR_retrono_particles中c_retrono_particles是什么意思 循环意味着,我也不知道光标中有巨大的背景

我曾尝试在DB2数据库中使用这个,但sintaxy没有 在DB2V11.1中识别。我还启用了ORA兼容性

PL/SQL游标的Oracle语法为:
用于游标名称循环中的记录…

这种语法在Oracle的

如果正确地启用了Oracle兼容性,Linux上的DB2V11.1将支持这种Oracle语法。如果您的安装拒绝使用这种Oracle语法,那么您的Db2配置一定犯了一些错误。一个常见的错误是,在创建DB2数据库之前,DB2_COMPATIBILITY_VECTOR=ORA变量无效


Db2目前并不支持Oracle语法中的所有内容,但这种形式的游标似乎得到了正确的模拟。

因此c_retrono_particoes是CUR_retrono_particoes中的一个新游标?“c_retrono_particoes”是一个行变量,包含游标中可以在循环中处理的一行。光标循环完成后,row变量不可用。鲁之最