2017-09-11 2 views
0

Ich möchte einen Excel-Bericht basierend auf State und Status herunterladen. Und für diese Daten immer rufe ich einen SP, deren Abfrage unterDaten werden nicht abgerufen, wenn Status in PLSQL ausstehend ist

SELECT * FROM UBR_STRUCTURE_DETAILS WHERE (STATE = P_STATE) AND (NE_STATUS = P_STATUS); 

dort viel von Daten für die Abfrage, aber ich bin nicht einen einzelnen Datensatz zu bekommen.

Staat -> Maharashtra

-Status -> Ausstehende.

HINWEIS IF Status ist, den Wert in UBR_STRUCTURE_DETAILS für Statusspalte anhängig ''

Update

PROCEDURE GET_DATA_WITH_STATUS_EXL 
(
    P_STATE NVARCHAR2, 
    P_STATUS VARCHAR2, 
    TBL_STATE_REP OUT SYS_REFCURSOR 
) 
AS 
    BEGIN 
    OPEN TBL_STATE_REP FOR 
     SELECT * FROM UBR_STRUCTURE_DETAILS WHERE (STATE = P_STATE) AND (NE_STATUS = P_STATUS); 
    NULL; 
END GET_DATA_WITH_STATUS_EXL; 
+0

haben Sie 'oder NE_STATUS = P hinzuzufügen versucht _STATUS' zur Abfrage? – droidnation

+0

@droidnation: Kann '' '' '' 'nicht hinzufügen, weil ich beide Bedingungen erfüllen möchte – BNN

+0

können Sie einige Screenshots hinzufügen oder mindestens eine SQL-Geige machen? – droidnation

Antwort

1

Können Sie dies versuchen:

PROCEDURE GET_DATA_WITH_STATUS_EXL 
(
    P_STATE NVARCHAR2, 
    P_STATUS VARCHAR2, 
    TBL_STATE_REP OUT SYS_REFCURSOR 
) 
AS 
    BEGIN 
     OPEN TBL_STATE_REP FOR 
     SELECT * FROM UBR_STRUCTURE_DETAILS 
     WHERE (STATE = P_STATE) AND (NE_STATUS = P_STATUS OR P_STATUS = 'Pending' AND NE_STATUS IS NULL); 
    NULL; 
END GET_DATA_WITH_STATUS_EXL; 

Simulation für xing, wer hatte einige Zweifel:

CREATE TABLE T_R (ID NUMBER(5,0), NE_STATUS VARCHAR(20)); 
INSERT INTO T_R VALUES (1,'Pending'); 
INSERT INTO T_R VALUES (2,'Not Pending'); 
INSERT INTO T_R VALUES (3,NULL); 
INSERT INTO T_R VALUES (4,''); 

Extract Bis

SELECT * FROM T_R 
WHERE NE_STATUS = 'Pending' OR 'Pending' = 'Pending' AND NE_STATUS IS NULL; 

Ausgang:

1 Pending 
3 (null) 
4 (null) 

Extract Andere

SELECT * FROM T_R 
WHERE NE_STATUS = 'Not Pending' OR 'Not_Pending' = 'Pending' AND NE_STATUS IS NULL; 

Ausgang:

2 Not Pending 
+0

das funktioniert einwandfrei.! – BNN

+0

Dies wird nicht zu einem korrekten Ergebnis führen. Es wird nur ausstehende Datensätze nicht anders erhalten. Und Klausel wird es blockieren – XING

+0

@Xing: Beispiel? – etsa

0

ich in Stackoverflow neu bin .. entschuldige mich, wenn jeder Fehler passieren.

in SP Ihre Abfrage so aussehen

SELECT * FROM UBR_STRUCTURE_DETAILS WHERE (STATE = @P_STATE) und (NE_STATUS = @P_STATUS)

Sie haben einen Wert zu übergeben in sqlcomman Objekt für den Parameter.

zB: sqlcomman.parameter.add ("@ P_STATE", stringState);

+0

Ich benutze' sql' nicht. Ich benutze plsql. hier ist die Art der Verwendung von Parametern unterschiedlich – BNN

1

Die eine Möglichkeit kann ich sehen, wenn CASE und SPACE wenn Sie die Beitrittsbedingung setzen. Ich würde sagen, die Eingabezeichenfolge und die Tabellenspalte in den gleichen Fall zu konvertieren und die Leerzeichen während einer Übereinstimmung zu trimmen. Siehe unten:

HINWEIS IF-Status wird der Wert in UBR_STRUCTURE_DETAILS für Statusspalte anhängig ist ''

PROCEDURE GET_DATA_WITH_STATUS_EXL (P_STATE    NVARCHAR2, 
            P_STATUS   VARCHAR2, 
            TBL_STATE_REP OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN TBL_STATE_REP FOR 
     SELECT * 
     FROM UBR_STRUCTURE_DETAILS 
     WHERE  DECODE (NE_STATUS, NULL, 'Y', TRIM (LOWER (NE_STATUS))) =      CASE 
         WHEN INITCAP (P_STATUS) = 'Pending' THEN 'Y' 
         ELSE TRIM (LOWER (P_STATUS)) 
        END 
      AND TRIM (LOWER (STATE)) = TRIM (LOWER (P_STATE)); 
-- NULL; 
END GET_DATA_WITH_STATUS_EXL; 
+0

wird versuchen, dies zu überprüfen, kann dies helfen – BNN

+0

'' '' funktioniert immer noch, aber 'IS NULL' arbeitet. Wie fügt man 'IS NULL' in die Abfrage ein? – BNN

+0

@VVVV. Siehe aktualisiert – XING

Verwandte Themen