Pergunta

Quero executar uma função simples no Oracle.A assinatura é definida da seguinte forma:

CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
                             p_fromDate in DATE,
                             p_toDate in DATE,
                             p_rowCount in INT
)
RETURN
                             SYS_REFCURSOR
IS
                             return_value SYS_REFCURSOR;
...

Devo ser capaz de executá-lo com:

var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc

Mas ao digitar "newcaselistforvalidation ('2010-01-01', '2011-01-01', 100)", obtenho:

ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1

Pesquisei um pouco no Google e parece que não consigo descobrir como digitar a data no formato correto.Alguém pode me ajudar?

Foi útil?

Solução

Consulte NLS_PARAMETERS no Oracle - você poderá ver em qual formato seu banco de dados está aceitando datas.

Normalmente, porém, eu uso a função to_date ():

to_date('01-01-2011','DD-MM-YYYY');

No Reino Unido para inserir minhas datas.

Outras dicas

Uma alternativa para a função to_date () é usar o formato padrão ANSI para literais DATE ou TIMESTAMP:

DATE '2010-01-31'
TIMESTAMP '2010-01-31 21:22:23'

A data e a hora são sempre especificadas usando as regras ISO (AAAA-MM-DD e formato de 24 horas para a hora)

Isso também funciona em muitos outros DBMS (em conformidade com o padrão).

É melhor não confiar em um valor específico nas configurações de NLS_PARAMETERS , porque isso fará com que sua função interrompa no ambiente com outro NLS_DATE_FORMAT .

Eu especificaria explicitamente a formatação de data em sua função, conforme sugerido na resposta acima

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);

INSERT INTO tblDate (dateStart) Valores ('20 -JUN-2013 '); Se você alterar o número inteiro do mês em uma string 'DD-MON-YYYY', funcionará como uma string de dados válida sem ter que precedê-la com o identificador DATE.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top