سؤال

لديّ نص يحصل على الوقت الحالي ، ويجب أن ينقله إلى نص آخر.

variable v_s_time varchar2(30);
exec :v_s_time := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
--Lots of unrelated code here
variable v_e_time varchar2(30);
exec :v_e_time  := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
@"test report script.sql" :v_s_time :v_e_time; --yes, I also tried ":v_s_time", didn't seem to do anything.

هذا لا يعمل ، يبدو أن الحرفي :v_s_time يتم تمريره إلى البرنامج النصي ، بدلاً من ما أريد: "2010-04-14 05:50:01 PM".

لتنفيذ هذا يدويًا ، يمكنني الدخول:

@"test report script.sql" "2010-04-14 05:50:01 PM" "2010-04-14 05:57:34 PM"

لقد وجدت أن ما يعمل هذا:

define v_s_time = "2010-04-14 05:50:01 PM"
--Lots of unrelated code here
define v_e_time = "2010-04-14 05:57:34 PM"
@"test report script.sql" "&&v_s_time" "&&v_e_time";

ولكن من غير الواقعي أن ترمز إلى أوقات البيانات. أي شخص يعرف كيف يتعامل مع هذا؟

(أوراكل 10G)

هل كانت مفيدة؟

المحلول

يمكنك استعمال ال جملة New_value من أمر COL لاسترداد قيمة ديناميكيًا إلى متغير بديل:

SQL> /*Declare that the "dat" column will be stored in the v_date variable*/
SQL> COL dat NEW_VALUE v_date

SQL> SELECT to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM') dat FROM dual;

DAT
----------------------
2010-04-15 09:54:29 AM

SQL> select '&&v_date' from dual;

'2010-04-1509:54:29AM'
----------------------
2010-04-15 09:54:29 AM

يمكنك بعد ذلك استدعاء البرنامج النصي الخاص بك مع هذا المتغير البديل:

@"test report script.sql" &&v_date

نصائح أخرى

هل يمكنك فقط الرجوع إلى متغيرات BIND في البرنامج النصي "Test Report Script.SQL"؟ بمعنى آخر ، في "Test Report Script.sql" ، لديك مرجع مباشر إلى V_S_TIME و V_E_TIME ، تخطي SQLبالإضافة إلى تحديد المتغير. لا يبدو أن هناك أي طريقة أنيقة حقًا للتحويل من متغيرات الربط إلى SQLبالإضافة إلى تحديد المتغيرات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top