Miltão

Relendo sua primeira mensagem, o erro acontece na chamada procedure, não é?
Se a declaração já está como VARCHAR2(20 CHAR), então o problema não
deve estar no parâmetro declarado... pois o valor passado tem só 9
caracteres.

Poderia fazer um teste, alterando a declaração para NVarchar2(20
char)... que geralmente usa UTF-16... só para ver como se comporta.

Outro teste seria tentar simular o erro, diretamente no SQL-Plus...
pois pode ser que o bug seja algo na biblioteca de conexão do PHP.

[ ]'s

André


Em 15/10/14, 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com
[oracle_br]<oracle_br@yahoogrupos.com.br> escreveu:
> Beleza André?
>
> Olha como está as declarações:
>
> CREATE OR REPLACE TYPE "PHP_ARRAY" AS VARRAY(200000) OF VARCHAR2(20 CHAR)
>
>
>
> procedure p_createInventory(iType     in number,
>                               iDesc     in varchar2,
>                               iRecord   in PHP_ARRAY, -- in varchar2,
> --multisel_values_table,
>                               omensagem out varchar2)
>
>
> O tipo já está como VARCHAR2(20 CHAR)!
>
> Att,
>
>
>
>
> Em 15 de outubro de 2014 12:51, Andre Santos andre.psantos...@gmail.com
> [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu:
>
>>
>>
>> Miltão
>>
>> Nesse cenário específico, pela mensagem de erro, o ambiente está usando
>> character-set UTF-16 que usa, no mínimo, 2 bytes por caractere.
>> Ou seja, quando é declarada uma variável VARCHAR2(9) **não** são 9
>> caracteres, são 9 BYTES.
>> Porém a quantidade de bytes, para UTF-16, tem de ser múltiplo de 2
>> (bytes).
>> Para declarar o tamanho em "caracteres", pode usar a sintaxe: VARCHAR2(9
>> CHAR).
>>
>> [ ]'s
>>
>> André Santos
>>
>>
>> Em 15 de outubro de 2014 12:35, 'Milton Bastos Henriquis Jr.'
>> miltonbas...@gmail.com [oracle_br] <oracle_br@yahoogrupos.com.br>
>> escreveu:
>>
>>
>>>
>>> Boa tarde pessoal
>>>
>>> Cenário:
>>>  - Oracle database 11.2.0.3
>>>  - Servidor Oracle Linux 64 bits
>>>  - Aplicação em PHP rodando num servidor IIS
>>>
>>>
>>> OCI-22141: given size [string] must be even in UTF-16 environment
>>> Cause: The given resize size is odd. In a UTF-16 environment, all
>>> characters are 2 bytes in length.
>>> Action: Ensure that the given size is even.
>>>
>>>
>>> Em uma certa tela do sistema, o usuário seleciona vários itens e clica
>>> num botão.
>>> Ao clicar nesse botão, esses itens são enviados pra um parâmetro de
>>> entrada de uma
>>> procedure. Como o número de itens é variado, o tipo desse parâmetro é um
>>> VARRAY.
>>> Cada item é uma string de 9 caracteres.
>>> O fato de ser 9 caracteres causa o erro acima - se passar 8 ou 10
>>> caracteres
>>> funciona, não acontece o erro. Mas se for uma quantidade ímpar, acontece
>>> o erro.
>>>
>>> O que faço pra corrigir isso? Devo alterar algo em algum parametro NLS?
>>>
>>>
>>>
>>> Att,
>>>
>>>
>>>
>>> Uma certa tela do sistema
>>>
>>>
>>
>>
>
  • [oracle_b... 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
    • Re: ... Andre Santos andre.psantos...@gmail.com [oracle_br]
      • ... 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
        • ... Andre Santos andre.psantos...@gmail.com [oracle_br]
        • ... jlchia...@yahoo.com.br [oracle_br]
          • ... 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
            • ... jlchia...@yahoo.com.br [oracle_br]
              • ... Andre Santos andre.psantos...@gmail.com [oracle_br]
                • ... jlchia...@yahoo.com.br [oracle_br]
                • ... 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
                • ... Andre Santos andre.psantos...@gmail.com [oracle_br]
                • ... jlchia...@yahoo.com.br [oracle_br]
                • ... 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]

Responder a