Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: ASP e ORACLE

  1. #1

    ASP e ORACLE

    Ciao a tutti ho un piccolo grande problema...
    ho una procedura oracle che devo richiamare da una pagina Asp (la procedura funziona correttamente) ed è dichiarata cosi:

    CREATE OR REPLACE PACKAGE BODY W_PK_SEARCH_APPLICATION AS
    ---PROCEDURE
    PROCEDURE W_PR_SEARCH_APPLICATION(INP_ID_USER IN INTEGER,
    OUT_ARR_ID_APPLICATION OUT TYPE_ID_APPLICATION,
    OUT_ARR_DESC_APPLICATION OUT TYPE_DESC_APPLICATION,
    OUT_NUMER_APPLICATION OUT INTEGER )

    Nella pagina asp ho scritto il seguente codice per richiamarla:
    Dim m_arr_AppoIdApplication
    Dim m_arr_AppodescApplication
    Set m_objADO_CommandSP = Server.CreateObject("ADODB.Command")
    Set m_objADO_CommandSP.ActiveConnection = p_objADOConnection
    'Nome Pakage e Procedure
    m_objADO_CommandSP.CommandText = "W_PK_SEARCH_APPLICATION.W_PR_SEARCH_APPLICATI ON"
    m_objADO_CommandSP.CommandType = adCmdStoredProc
    'Parametri Procedura
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput)
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_ID_APP LICATION " , adInteger,adParamOutput)
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_DESC_A PPLICATION", adChar,adParamOutput,30)
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_NUMER_APPL ICATION", adInteger,adParamOutput)

    m_objADO_CommandSP("INP_ID_USER") = m_intIdUser
    m_objADO_CommandSP.Execute

    Ma ogni volta che lancio la pagina mi da il seguente errore:
    ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'W_PR_SEARCH_APPLICATION' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

    Non riesco a capire come risolverlo , se riuscite a darmi una mano è bene accetta.

    Mille Grazie

  2. #2
    Prova così:

    codice:
    Dim m_arr_AppoIdApplication 
    Dim m_arr_AppodescApplication 
    Set m_objADO_CommandSP = Server.CreateObject("ADODB.Command") 
    Set m_objADO_CommandSP.ActiveConnection = p_objADOConnection 
    'Nome Pakage e Procedure 
    m_objADO_CommandSP.CommandText = "W_PK_SEARCH_APPLICATION.W_PR_SEARCH_APPLICATION(?,?,?,?)" 
    m_objADO_CommandSP.CommandType = adCmdStoredProc 
    'Parametri Procedura 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_ID_APPLICATION " , adInteger,adParamOutput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_DESC_APPLICATION", adChar,adParamOutput,30) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_NUMER_APPLICATION", adInteger,adParamOutput) 
    
    m_objADO_CommandSP("INP_ID_USER") = m_intIdUser   
    m_objADO_CommandSP.Execute
    Però mi dovresti spiegare la riga in grassetto corsivo: è un parametro a parte? Ti serve?
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  3. #3
    La linea in grasetto è il parametro di input (contenuto nella variabile m_intIdUser )
    Mille grazie ora provo ti faccio sapere.

  4. #4
    Ho fatto la modifica che mi hai consigliato.
    non presenta piu quel errore ma il seguente:

    Provider error '80040e10'

    No value given for one or more required parameters.

    E:\INTRANET\WAMS\11.AD.1.0.0\W_PAGE\W_ASP\../../W_Include/W_Class/W_SearchApplicationUser.asp, line 51

  5. #5
    Si, ma non ne capisco il senso, visto che lo passi per primo, prova così:

    codice:
    Dim m_arr_AppoIdApplication 
    Dim m_arr_AppodescApplication 
    Set m_objADO_CommandSP = Server.CreateObject("ADODB.Command") 
    Set m_objADO_CommandSP.ActiveConnection = p_objADOConnection 
    'Nome Pakage e Procedure 
    m_objADO_CommandSP.CommandText = "W_PK_SEARCH_APPLICATION.W_PR_SEARCH_APPLICATION(?,?,?,?)" 
    m_objADO_CommandSP.CommandType = adCmdStoredProc 
    'Parametri Procedura 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_ID_APPLICATION " , adInteger,adParamOutput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_DESC_APPLICATION", adChar,adParamOutput,30) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_NUMER_APPLICATION", adInteger,adParamOutput) 
    m_objADO_CommandSP.Execute
    [EDIT]: in Visual Basic la sintassi è molto simile solo che presuppone la seguente:

    codice:
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter (<NOME_PARAMETRO>,<DATA_TYPE>,<INPUT/OUTPUT>,<DIMENSIONE>,<VALORE_EFFETTIVO>)
    Tu qua passi solamente il nome_parametro, il data_type e l'input/output, ne mancano 2:

    codice:
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput)
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  6. #6
    Ma cosi come assegno il valore al parametro di input

  7. #7
    Comunque da sempre il seguente errore:
    Provider error '80040e10'

    No value given for one or more required parameters.


  8. #8
    come commandtext puoi usare tranquillamente quello specificato nel primo post:
    codice:
    m_objADO_CommandSP.CommandText = "W_PK_SEARCH_APPLICATION.W_PR_SEARCH_APPLICATION"
    il problema a mio avviso, visto che i parametri (4) ci sono tutti, è sui tipi di dato. tu hai due parametri in output dichiarati come tipi di dati personalizzati.
    di che tipi di dati si tratta?
    inoltre, che driver usi per la connessione al database?
    xxx

  9. #9
    Originariamente inviato da maximum
    Si, ma non ne capisco il senso, visto che lo passi per primo, prova così:

    codice:
    Dim m_arr_AppoIdApplication 
    Dim m_arr_AppodescApplication 
    Set m_objADO_CommandSP = Server.CreateObject("ADODB.Command") 
    Set m_objADO_CommandSP.ActiveConnection = p_objADOConnection 
    'Nome Pakage e Procedure 
    m_objADO_CommandSP.CommandText = "W_PK_SEARCH_APPLICATION.W_PR_SEARCH_APPLICATION(?,?,?,?)" 
    m_objADO_CommandSP.CommandType = adCmdStoredProc 
    'Parametri Procedura 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_ID_APPLICATION " , adInteger,adParamOutput) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_ARR_DESC_APPLICATION", adChar,adParamOutput,30) 
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter("OUT_NUMER_APPLICATION", adInteger,adParamOutput) 
    m_objADO_CommandSP.Execute
    [EDIT]: in Visual Basic la sintassi è molto simile solo che presuppone la seguente:

    codice:
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter (<NOME_PARAMETRO>,<DATA_TYPE>,<INPUT/OUTPUT>,<DIMENSIONE>,<VALORE_EFFETTIVO>)
    Tu qua passi solamente il nome_parametro, il data_type e l'input/output, ne mancano 2:

    codice:
    m_objADO_CommandSP.Parameters.Append m_objADO_CommandSP.CreateParameter ("INP_ID_USER",adInteger,adParamInput)
    dimensione e valore sono facoltativi nella dichiarazione del parametro. la dimensione e bene metterla (ma se non specificata non restituisce erroe). il valore puoi (come è d'uso fare) assegnarlo in un secondo momento, prima dell'execute (nomeCommand("nomeParametro") = ...)
    xxx

  10. #10
    Il driver è quello di orcale 9
    i tipi sono i seguenti: (mi sa ke l'errore sta proprio su questi tipi perche se uso tipi standard non va in errore ma posso usare un solo record)

    Ecco tutta la sintassi della sp.
    CREATE OR REPLACE PACKAGE W_PK_SEARCH_APPLICATION AS
    ---TIPO DATI, per la dichiarazione degli ARRAY in OUTPUT
    TYPE TYPE_ID_APPLICATION IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;
    TYPE TYPE_DESC_APPLICATION IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;



    TYPE RESULTRECTYP_MAIN IS RECORD
    (ID_APPLICATION INTEGER,
    DESC_APPLICATION VARCHAR2(30));
    ---TIPO DATI, per la dichiarazione dei CURSORI utilizzati
    TYPE RESULTCURTYP IS REF CURSOR;
    ---PROCEDURE
    PROCEDURE W_PR_SEARCH_APPLICATION(INP_ID_USER IN INTEGER,
    OUT_ARR_ID_APPLICATION OUT TYPE_ID_APPLICATION,
    OUT_ARR_DESC_APPLICATION OUT TYPE_DESC_APPLICATION,
    OUT_NUMER_APPLICATION OUT INTEGER
    );
    END W_PK_SEARCH_APPLICATION;


    CREATE OR REPLACE PACKAGE BODY W_PK_SEARCH_APPLICATION AS
    ---PROCEDURE
    PROCEDURE W_PR_SEARCH_APPLICATION(INP_ID_USER IN INTEGER,
    OUT_ARR_ID_APPLICATION OUT TYPE_ID_APPLICATION,
    OUT_ARR_DESC_APPLICATION OUT TYPE_DESC_APPLICATION,
    OUT_NUMER_APPLICATION OUT INTEGER
    )
    IS
    RESULT_CV RESULTCURTYP;
    RESULT_REC RESULTRECTYP_MAIN;
    STR_SQL VARCHAR2(500);
    ROW_COUNT INTEGER(6) := 1;
    BEGIN
    -- VERIFICO PARAMETRO DI INPUY
    IF INP_ID_USER IS NULL THEN
    RETURN;
    END IF;
    -- COSTRUISCO LA QUERY
    STR_SQL := 'SELECT ID_APPLICATION, DESC_APPLICATION ' ||
    'FROM W_ANAG_APPLICATION ' ||
    'WHERE ID_APPLICATION = ' ||
    ' (SELECT DISTINCT ID_APPLICATION ' ||
    ' FROM W_ANAG_USER_PERMITTED ' ||
    ' WHERE ID_USER = ' || INP_ID_USER || ') ' ||
    'ORDER BY DESC_APPLICATION';
    --APRO IL RECORDSER
    OPEN RESULT_CV FOR STR_SQL;
    FETCH RESULT_CV INTO RESULT_REC.ID_APPLICATION, RESULT_REC.DESC_APPLICATION;
    OUT_NUMER_APPLICATION := 0;
    IF RESULT_CV%NOTFOUND THEN
    CLOSE RESULT_CV;
    RETURN;
    ELSE
    OUT_ARR_ID_APPLICATION (ROW_COUNT) := RESULT_REC.ID_APPLICATION;
    OUT_ARR_DESC_APPLICATION (ROW_COUNT) := RESULT_REC.DESC_APPLICATION;
    OUT_NUMER_APPLICATION := ROW_COUNT;
    END IF;
    LOOP
    ROW_COUNT := ROW_COUNT + 1;
    FETCH RESULT_CV INTO RESULT_REC.ID_APPLICATION, RESULT_REC.DESC_APPLICATION;
    IF RESULT_CV%NOTFOUND THEN
    CLOSE RESULT_CV;
    OUT_NUMER_APPLICATION := ROW_COUNT - 1;
    EXIT;
    ELSE
    OUT_ARR_ID_APPLICATION (ROW_COUNT) := RESULT_REC.ID_APPLICATION;
    OUT_ARR_DESC_APPLICATION (ROW_COUNT) := RESULT_REC.DESC_APPLICATION;
    END IF;
    END LOOP;
    --EXCEPTION WHEN OTHERS THEN
    -- OUT_ARR_DESC_APPLICATION (ROW_COUNT) := "ERROR";

    END W_PR_SEARCH_APPLICATION;
    END W_PK_SEARCH_APPLICATION;




    Mille grazie ancora non sai in ke kasini mi trovo grazie a sta sp

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.