开发者

Appending conditions in where clause not working

开发者 https://www.devze.com 2023-04-11 17:21 出处:网络
I am trying to append condition to where clause .But the string which contains the condition is not working .I am not getting any error but the condition is not fully applied in the query

I am trying to append condition to where clause .But the string which contains the condition is not working .I am not getting any error but the condition is not fully applied in the query

Here's the query.I am passing CLINIC_ID and taleEnd to my stored procedure.taleEnd will include a condition or more like this - "and DOS between '2011-09-08' and '2011-10-08'"

SELECT *
  FROM A
  JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
  JOIN C ON P.CLINIC_ID = VP.CLINIC_ID  AND P.PATIENT_ID = VP.PATIENT_ID
  JOIN D ON I.CLINIC_ID = C.CLINIC_ID  AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
  JOIN E ON B.CLINIC_ID = I.CLINIC_ID  AND B.BUSINESS_ID= I.COMPANY_ID
 WHERE (VP.STATUS = 3 OR VP.STATUS = 5)
   AND VP.PRIMARY_PAID = 0
   AND VP.PRIMARY_PENDING > 0
   AND C.PRIMARY_PAYER_ID > 0
   AND C.HIDEN = 0
   AND VP.CLINIC_ID = CLINIC_ID + taleEnd

The problem is that only clinic_id and not DOS is applied when i run the stored procedure.I tried concat ,set but nothing worked.i didn't got any error but the result do not applies DOS.Can any开发者_如何学C one help me please.

@Devart This is the store procedure.

CREATE DEFINER=`root`@`%` PROCEDURE `PRIMARY_INSURANCE_AGING`(CLINIC_ID INT,taleEnd TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS PRIMARY_TEMP;
CREATE TEMPORARY TABLE PRIMARY_TEMP
SELECT *     
  FROM A   
  JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID   
  JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID   
  JOIN D ON I.CLINIC_ID = C.CLINIC_ID  AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID   
  JOIN E ON B.CLINIC_ID = I.CLINIC_ID  AND B.BUSINESS_ID= I.COMPANY_ID 
 WHERE (VP.STATUS = 3 OR VP.STATUS =5 ) 
   AND VP.PRIMARY_PAID = 0   
   AND VP.PRIMARY_PENDING > 0   
   AND C.PRIMARY_PAYER_ID > 0   
   AND C.HIDEN = 0  
   AND VP.CLINIC_ID = CLINIC_ID + taleEnd;

   END

This is the usage of Prepare statement

SET @A = CONCAT(34847," and DOS between '2011-09-08' and '2011-10-08'");
PREPARE STMT FROM '
SELECT *
  FROM A
  JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
  JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID
  JOIN D ON I.CLINIC_ID = C.CLINIC_ID AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
  JOIN E ON B.CLINIC_ID = I.CLINIC_ID AND B.BUSINESS_ID= I.COMPANY_ID
  WHERE (VP.STATUS = 3 OR VP.STATUS = 5)
  AND VP.PRIMARY_PAID = 0
  AND VP.PRIMARY_PENDING > 0
  AND C.PRIMARY_PAYER_ID > 0
  AND C.HIDEN = 0
  AND VP.CLINIC_ID ? ';

EXECUTE STMT USING @A;


Agree with Dave Rix about the variable and field names, they should be different.

If you want to append additional string (like - and DOS between '2011-09-08' and '2011-10-08') to the query, then you should use a prepared statement.

EDIT:

Example:

SET @query = 'SELECT *
FROM A
JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID
JOIN D ON I.CLINIC_ID = C.CLINIC_ID AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
JOIN E ON B.CLINIC_ID = I.CLINIC_ID AND B.BUSINESS_ID= I.COMPANY_ID WHERE (VP.STATUS = 3 OR VP.STATUS =5 ) AND VP.PRIMARY_PAID = 0
AND VP.PRIMARY_PENDING > 0
AND C.PRIMARY_PAYER_ID > 0
AND C.HIDEN = 0
AND VP.CLINIC_ID = ?'; -- ? will be supplied with procedure argument clinic_id_value; where clinic_id_value is a renamed procedure argument

IF taleEnd IS NOT NULL THEN
  @query = CONCAT(@query, ' ', taleEnd);
END IF;

SET @clinic_id_value = clinic_id_value; -- copy procedure argument to the local variable
PREPARE STMT FROM @query;
EXECUTE STMT USING @clinic_id_value;
DEALLOCATE PREPARE STMT;


If you're passing in CLINIC_ID to the stored procedure, and trying to use that within the procedure, I think (without being able to check properly), that there is confusion between the variable CLINIC_ID and the field VP.CLINIC_ID.

Try changing the variable name in the procedure to something unique.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号