मेरे पास एक फ़ील्ड है जिसमें एक नंबर होगा, मैं सम्मिलन पर उस नंबर पर जटिल सत्यापन कैसे कर सकता हूं?

मुझे जावा में लागू सत्यापन एल्गोरिदम मिल गया है, बस सोच रहा है कि एसक्यूएल में "इसका अनुवाद कैसे करें"। जैसे मैं सम्मिलित संख्या के साथ कुछ गणना करता हूं और यदि गणना पूर्व निर्धारित परिणाम से मेल नहीं खाती है तो मैं उस प्रविष्टि को अस्वीकार करना चाहता हूं। यह कैसे करना है?

मुझे लगता है कि मुझे क्षेत्र पर एक चेक बाधा का उपयोग करने की आवश्यकता है, लेकिन मैं बाधा में अपना सत्यापन एल्गोरिदम कैसे शामिल करूं?

मेरा एल्गोरिदम इस तरह दिखता है

int s=0;
for (int i = 0; i < 10; i++)
    {
       s+=n%10;
       n/=10;
    }
if(n==s)
    //Good Value

जहां n प्रारंभ में मेरा मूल्य डाला जाना है।

0
Paul 30 पद 2020, 17:02
1
कृपया अपने इच्छित तर्क का शब्दों में वर्णन करें, और नमूना डेटा और वांछित परिणाम प्रदान करें। सभी SQL लोग धाराप्रवाह जावा नहीं बोलते हैं।
 – 
GMB
30 पद 2020, 17:04
ट्रिगर्स की तलाश करें (आपके मामले में "ट्रिगर डालें")
 – 
Alexey Larionov
30 पद 2020, 17:04
सत्यापन एल्गोरिथ्म अप्रासंगिक है। मैं सोच रहा हूं कि एक बाधा में एल्गोरिदम का उपयोग कैसे करें (यदि वह वह जगह है जहां मुझे इसे सम्मिलित करना चाहिए)। कोई भी उदाहरण (जिसे एक साधारण समीकरण या तुलना से हल नहीं किया जा सकता) पर्याप्त होगा।
 – 
Paul
30 पद 2020, 17:06
अच्छे मूल्य से आपका मतलब है कि यदि डाला गया मान 1 से 10 के बीच है, शून्य नहीं, नकारात्मक नहीं आदि, यह चेक बाधा में किया जा सकता है,
 – 
George Joseph
30 पद 2020, 17:08
2
आप यहां चेक बाधा में udf का उपयोग कर सकते हैं
 – 
Richard Matheson
30 पद 2020, 17:09

1 उत्तर

सबसे बढ़िया उत्तर

चूंकि यह चेक जटिल है, इसलिए आपको इसे पीएल/एसक्यूएल में अनुवाद करना होगा और इस तर्क को पहले इन्सर्ट और/या अद्यतन से पहले ट्रिगर में जोड़ना होगा।

मान लें कि आपकी तालिका को MY_TABLE कहा जाता है और इसमें एक फ़ील्ड MY_FIELD है जो NUMBER डेटाटाइप के रूप में है:

CREATE OR REPLACE TRIGGER  TRIGGER_VALIDATE_N
BEFORE  
insert or update on MY_TABLE
for each row  
    s NUMBER := 0;
    n NUMBER;
begin  

    n := :OLD.MY_FIELD;

    FOR i IN 0..10 LOOP
        s := MOD(n,10);
        n := n/10;
    END LOOP;

    IF n = s THEN
        --Good Value
        null;
    ELSE
        --Wrong Value raise an error
        RAISE_APPLICATION_ERROR(-20000, TO_CHAR(:OLD.MY_FIELD)||' is a wrong value for MY_TABLE.MY_FIELD.');
    END IF;
end;  
/
1
SuperPoney 7 जिंदा 2021, 13:04
मैंने यही करना समाप्त किया। हालांकि उत्तर देने के लिए धन्यवाद, वास्तव में इसकी सराहना करते हैं!
 – 
Paul
8 जिंदा 2021, 00:26