Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

डायनेमिक PL/SQL दिनांक पैरामीटर समय मान के साथ बरकरार रखा गया

बाइंड वैरिएबल का इस्तेमाल करें

SQL> create or replace procedure proc( p_dt in date )
  2  as
  3  begin
  4    dbms_output.put_line( to_char( p_dt, 'yyyy-mm-dd hh24:mi:ss' ));
  5  end;
  6  /

Procedure created.

SQL> declare
  2    l_sql varchar2(1000);
  3  begin
  4    l_sql := 'begin proc(:dt); end;';
  5    execute immediate l_sql using sysdate;
  6  end;
  7  /
2013-08-26 22:14:26

PL/SQL procedure successfully completed.

आपके कोड के साथ समस्या यह है कि आपकी स्ट्रिंग बनाने के लिए, Oracle को DATE . को कनवर्ट करना होगा एक VARCHAR2 . के लिए . यह आपके सत्र के NLS_DATE_FORMAT . का उपयोग करके ऐसा करता है . लेकिन आपके सत्र का NLS_DATE_FORMAT शायद समय घटक शामिल नहीं है, इसलिए जब आपकी प्रक्रिया को वास्तव में बुलाया जाता है तो समय खो जाता है। बाइंड वेरिएबल्स का उपयोग करने का मतलब है कि आपको उस तरह के निहित रूपांतरण से निपटने की ज़रूरत नहीं है (यह अधिक कुशल और अधिक सुरक्षित भी है)।

यदि आप वास्तव में बाइंड वैरिएबल के उपयोग से बचना चाहते हैं, तो आप स्पष्ट रूप से sysdate . कास्ट कर सकते हैं एक to_char . का उपयोग करके एक स्ट्रिंग के लिए और फिर एक to_date डालें गतिशील प्रक्रिया कॉल में। लेकिन यह बहुत सारे अतिरिक्त कोड और कई अनावश्यक रूपांतरण हैं।

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    l_sql varchar2(1000);
  3  begin
  4    l_sql := q'{begin proc(to_date('}' ||
  5               to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ||
  6               q'{', 'yyyy-mm-dd hh24:mi:ss')); end;}';
  7    execute immediate l_sql;
  8* end;
SQL> /
2013-08-26 22:19:52

PL/SQL procedure successfully completed.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फ़ाइल या असेंबली लोड नहीं कर सका 'Oracle.DataAccess' 64 बिट ODP.NET

  2. Oracle sqlदो तारीख के बीच घटाना

  3. TEMPFILE ऑफ़लाइन भौतिक स्टैंडबाय

  4. जुनीट/एचएसक्यूएलडीबी:एचएसक्यूएलडीबी (कोई विशेषाधिकार और/या कोई दोहरी वस्तु नहीं) का उपयोग करते समय ओरेकल सिंटैक्स के साथ त्रुटियों को कैसे प्राप्त करें

  5. '%abc%' सर्च के लिए टेक्स्ट इंडेक्स कैसे बनाएं?