سؤال

ماذا فعلت : دافع في استعلام؟

INSERT INTO MyTable (ID) VALUES (:myId)

كيف يجلب القيمة المطلوبة؟

تعديل: أيضا ما هي تلك العلامة التي تسمى؟ أردت البحث على Google ، ولكن ما اسمه :?

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

المحلول

هذا يسمى أ ربط المتغير في أوراكل.

ما اسم ":"؟

القولون.

نصائح أخرى

ماذا ":" دافع في استعلام؟

أ ربط المتغير. تسمح متغيرات BIND ببيان SQL واحد (سواء أكان استعلامًا أو DML) لإعادة استخدامه عدة مرات ، مما يساعد الأمن (عن طريق عدم سماع هجمات حقن SQL) والأداء (عن طريق تقليل مقدار التحليل المطلوب).

كيف يجلب القيمة المطلوبة؟

قبل تنفيذ الاستعلام (أو DML) بواسطة Oracle ، سيقوم برنامجك بإنشاء مؤشر. يصدر البرنامج الخاص بك SQL ليتم تحليله لهذا المؤشر ، ثم يجب أن يربط القيم لكل متغير ربط يشار إليه بواسطة SQL. كيف يتم ذلك يعتمد على اللغة.

ما الذي تسمى هذه العلامة؟

القولون.

هذه علامة لمعلمة الاستعلام المسماة ، وهي ليست جزءًا من بناء الجملة الفعلي للاستعلام. يتم استبدال العلامة ببعض القيمة المحددة في الكود الذي يجعل الاستعلام قبل تشغيله بالفعل.

القولون : يستخدم في لغة الاستعلام HQL Hibernate للدلالة على وجود معلمة متضمنة.

إذن ما يعنيه ذلك هو: SQL Syntax:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

هو نفس بناء جملة HQL:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

empID كونه متغيرًا محليًا للمعلمات ...

أتمنى أن يساعدك هذا.

إنها المعلمة المسماة.

في C#، يمكنك بادئة المعلمة مع @ (انظر هنا).

النظر في العبارات التالية

select name from T_emp where id=1;
select name from T_emp where id=2;
select name from T_emp where id=3;

في كل مرة يتم تنفيذ بيان ، يقوم Oracle بالتحقق من الأحداث السابقة لنفس الاستعلام. إذا وجد الاستعلام نفسه ، فإنه يستخدم نفسه خطة التنفيذ. إذا لم يكن الأمر كذلك ، فيجب عليه العثور على مسارات التنفيذ المختلفة ، والتوصل إلى خطة التنفيذ المثلى وتنفيذها.

على عكس الإنسان ، فإنه ليس ذكيًا بما يكفي لإدراك أن الهوية فقط قد تغير (حسب المثال أعلاه). وبالتالي فإنه يمر بكل النضالات وينفذها.

ولكن هناك طريقة لإخبار أوراكل بأنه عبارة مشابهة وأنه يمكنه استخدام خطة التنفيذ نفسها - ربط المتغير. الرجاء العثور على المثال أدناه:

declare
  v_id number;
  v_name varchar2(30);
  type c is ref cursor;
  c1 c;
begin
  for i in 1..100
   loop
    open c1 for 'select * from T_emp where id = :x' using i;
    fetch c1 into v_name;
    dbms_output.put_line('name is ' || v_name);
   end loop;
END;

يساعد استخدام متغيرات BIND على تحسين الأداء عشرة أضعاف. تستخدم PL/SQL متغيرات الربط من تلقاء نفسها (لا تحتاج إلى إخبارها بشكل صريح)

هذا أيضًا بناء جملة المعلمة لاستعلام دلفي

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