七台河北京网站建设,深圳营销策划,网站建设国际深圳,网站开发的前后台的步骤分别为一、带参数的游标参数是一个变量#xff0c;其名称用于游标声明中。 当游标打开时#xff0c;参数值被传递给Oracle服务器#xff0c;Oracle服务器使用它来决定要将哪些行检索到光标的活动集中。这意味着您可以在块中多次打开和关闭显式光标#xff0c;或者在同一个块的不同…一、带参数的游标参数是一个变量其名称用于游标声明中。 当游标打开时参数值被传递给Oracle服务器Oracle服务器使用它来决定要将哪些行检索到光标的活动集中。这意味着您可以在块中多次打开和关闭显式光标或者在同一个块的不同执行中打开和关闭显式光标每次都返回一个不同的活动集。考虑将任何region_id传递给游标的示例并返回该区域中国家/地区的名称。
例子
DECLARECURSOR c_country (p_region_id NUMBER) ISSELECT country_id, country_nameFROM wf_countriesWHERE region_id p_region_id;v_country_record c_country%ROWTYPE;
BEGINOPEN c_country (5); --更改为需要的区域。LOOPFETCH c_country INTO v_country_record;EXIT WHEN c_country%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_country_record.country_id|| || v_country_record.country_name);END LOOP;CLOSE c_country;
END;二、参数游标用法
1使用参数语法定义游标
在游标声明中命名的每个参数在OPEN语句中必须具有对应的值。 参数数据类型与标量变量的数据类型相同但不给它们大小。 参数名称在游标SELECT语句的WHERE子句中使用。
CURSOR cursor_name[(parameter_name datatype, ...)]
ISselect_statement;在语法中
cursor_name是声明的游标的PL / SQL标识符
•parameter_name是参数的名称
•数据类型是参数的标量数据类型•select_statement是一个没有INTO子句的SELECT语句
用参数打开游标
以下是用参数打开游标的语法
OPEN cursor_name(parameter_value,.....) ;2带参数的游标游标打开时将参数值传递给游标。 因此您可以多次打开一个显式光标并每次获取一个不同的活动集。 在以下示例中游标会多次打开。具有参数的光标的另一个例子
DECLARE
v_deptid employees.department_id%TYPE;
CURSOR empcur (p_deptid NUMBER) ISSELECT employee_id, salaryFROM employeesWHERE department_id p_deptid;
v_emp_rec empcur%ROWTYPE;
BEGIN
SELECT MAX(department_id) INTO v_deptidFROM employees;
OPEN empcur(v_deptid);
LOOPFETCH empcur INTO v_emp_rec;EXIT WHEN empcur%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_rec.employee_id|| || v_emp_rec.salary);
END LOOP;
CLOSE empcur;
END;
3光标FOR循环参数
如果需要我们可以使用游标FOR循环
DECLARECURSOR emp_cursor (p_deptno NUMBER) ISSELECT employee_id, last_nameFROM employeesWHERE department_id p_deptno;
BEGINFOR v_emp_record IN emp_cursor(10) LOOP….END LOOP;
END;
4具有多个参数的游标
在下面的例子中声明了一个游标并用两个参数调用
DECLARECURSOR countrycursor2 (p_region_id NUMBER,p_population NUMBER) ISSELECT country_id, country_name, populationFROM wf_countriesWHERE region_id p_region_idOR population p_population;
BEGINFOR v_country_record IN countrycursor2(145,10000000) LOOP
DBMS_OUTPUT.PUT_LINE(v_country_record.country_id || || v_country_record. country_name|| ||
v_country_record.population);
END LOOP;
END;另一个例子
该光标可以获取所有收入超过10000美元的IT程序员。DECLARECURSOR emp_cursor3 (p_job VARCHAR2,p_salary NUMBER) ISSELECT employee_id, last_nameFROM employeesWHERE job_id p_jobAND salary p_salary;
BEGINFOR v_emp_record IN emp_cursor3(IT_PROG, 10000) LOOPDBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id || ||v_emp_record.last_name);END LOOP;
END;