Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que este procedimento armazenado está inserindo valores NULL na tabela?


Para responder à sua pergunta de por que está inserindo nulos, é porque você não está fornecendo nenhum valor aos parâmetros do procedimento ao executá-lo.

Com base no que você afirmou na pergunta e no seu comentário acima, parece que você está perdendo algumas habilidades fundamentais ao trabalhar com a Oracle. O código que você escreveu é um procedimento, não uma função, então você não pode chamá-lo em um SELECT declaração. Um procedimento é chamado dentro de um bloco plsql. Seu procedimento conforme escrito recebe dois argumentos, que você deve passar para a chamada de procedimento por meio do código de chamada. O código do procedimento que você escreveu não procura dados do XML_HOURS_LOAD tabela.

Todos nós fomos a nova pessoa aprendendo Oracle. Você vai querer ver alguns tutoriais para começar nos fundamentos da codificação pl/sql para ajudar a esclarecer as diferenças entre funções e procedimentos armazenados e como usar argumentos de parâmetro.

Pelo que você escreveu em sua pergunta, acredito que este seja o código que você deseja:
DECLARE
   p_code IS XML_HOURS_LOAD.code%TYPE,
   p_product IS XML_HOURS_LOAD.product%TYPE;
   CURSOR cXmlHoursLoadCursor IS (SELECT code, product FROM xml_hours_load); --You can add a WHERE condition to this cursor query
BEGIN
    FOR v IN cXmlHoursLoadCursor LOOP
       Cascade_Load(v.code, v.product);
       COMMIT; --I recommend calling commit here instead of inside your stored procedure so that the calling code has control of the transaction state
    END LOOP;
END;