ME游标管理

1、游标类型

 (1) 隐式游标在PL/SQL中执行DML SQL语句自动创建隐式游标

     隐式游标的属性有:

       %FOUND  -- SQL语句影响了一行或多行市为TRUE

       %NOTFOUND  --SQL语句没有影响任何时为TRUE

       %ROWCOUNT  --SQL语句影响的行数

       %ISOPEN--游标是否打,始终为FALSE

   例如:

   SET SERVEROUTPUT ON

   BEGIN

     update toys set tyoprice=270 where toyid='P005'

     if SQL%FOUND then  --只有DML语句影响一行或多行时,才返回true

       DBMS_OUTPUT.PUT_LINE('表已跟新');

     end if;

   END;

  

    SET SERVEROUTPUT ON

    DECLARE

       v_toyid toys.id%type:='&TOYID';

       v_toyname toys.name%type='&TOYNAME';

    BEGIN

      update toys set name=v_toyname

      where toyid=v_toyid;

       if SQL%NOTFOUND then--只有DML语句不影响任何行时,才返回true

            dbms_output.put_line('bian hao wei zhao dao');

       else

           dbms_output.put_line('biao yi geng xin');

       end if;

    END;

 

    SET SERVEROUTPUT ON

    BEGIN

     update vendor_master

     set venname='Rob Mathew' where vencode='V004';

     dbms_output.put_line(SQL%ROWCOUNT); --返回DML语句影响的行数

    END;

    

  (2)显示游标 用于处理返回多行的查询

    不带参数的游标

    SET SERVER OUTPUT ON

    DECLARE

       my_toy_price toys.toyprice%type;

      CURSOR toy_cur is

         select toyprice from toys where toyprice<250;

    BEGIN

      OPEN toy_cur;

      LOOP

      FETCH toy_cur INTO my_toy_price;

     EXIT WHEN toy_cur%NOTFOUND;

     DBMS_OUTPUT.PUT_LINE('TOYPRICE=:WANJUDANJIAO=:'||my_toy_price);

     END LOOP;

     CLOSE toy_cur;

    END;

     带参数的游标:

   SET SERVEROUTPUT ON

   DECLARE

     desig varchar2(20);

     emp_code varchar2(5);

     empnm varchar2(20);

     CURSOR emp_cur (desigparam varchar2) IS

     SELECT empno,ename from employee where designation=desig;

   BEGIN

     desig:='&desig';

     OPEN emp_cur(desig);

     LOOP

      FETCH emp_cur INTO emp_code,empnm;

      EXIT WHEN emp_cur%notfound;

      dbms_outpu.put_line(emp_code||' ' || empnm);

     END LOOP;

    CLOSE emp_cur;

   END;

    使用显式游标更新行

  允许使用游标删除或更新活动集中的行

  声明游标时必须使用SELECT ...FOR UPDATE 语句

         CURSOR <curosr_name> IS

       SELECT statement FOR UPDATE; 

 

         UPDATE  <table-name>

          SET <set_name>

        WHERE current of <cursor_name>;

 

       DELETE FROM <table_name>

      WHERE current of <corsor_name>;

例如:

   SET SERVEROUTPUT ON

   DECLARE

     new_price NUMBER;

     CURSOR   cur_toy IS

       SELECT  toyprice from toys where toyprice<100

       for update of toyprice;

   BEGIN

      OPEN cur_toy;

     LOOP

        FETCH cur_toy INTO  new_price;

       EXIT WHEN cur_toy%NOTFOUND;

       UPDATE toys

       SET toyprice=1.1*new_price

       WHERE CURRENT OF cur_toy;

   END LOOP;

   CLOSE cur_toy;

   COMMIT;

   END;

 

   循环游标:用于简化游标处理代码

例如:

    SET SERVER OUTPUT ON

    DECLARE

       CURSOR mytoy_cur is

       select toyid,toy_name,toyprice from toys;

    BEGIN

      FOR toy_rec IN mytoy_cur

      LOOP

       DBMS_OUTPUT.PUT_LINE('编号:'||' '||toy_rec.toyid||''

                                               '名称:'||' '||toy_rec.toyname||''

                                                '单价:'||' "||toy_rec.toyprice);

      END LOOP;

    END;

 

  (3)REF游标用于处理运行时才能确定的动态SQL查询的结果(用于处理运行时动态执行的SQL查询)

 

声明强类型的REF游标:

   TYPE my_curtype IS REF CURSOR

     RETURN stud_det%ROWTYPE;

  order_cur my_curtype;

 

声明弱类型的REF游标:

  TYPE my_ctype IS REF CURSOR;

  stud_cur my_ctype;

 

2、使用游标变量执行动态SQL

 

  DECLARE

    r_emp emp%rowtype;

    TYPE c_type IS REF CURSOR;

    cur c_type;

    p_salary number;

  BEGIN

    p_salary:=2500;

    OPEN cur FOR 'select * from emp where sal>:1

                             order by sal desc'

    USING p_salary;

   DBMS_OUTPUT.PUT_LINE('薪水大于'||P_SALARY||'的员工有:_'

   LOOP

    FETCH cur INTO r_emp;

     EXIT WHEN cur%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE('编号:'||r_emp.empno||'姓名:'||r_emp.ename||'薪水:'||r_emp.sal);

   END LOOP;

  CLOSE cur;

_

  END;

3.程序包中的游标

Create or replace package cur_pack as

Cursor ord_cur(vcode varchar2)

Return order_master%rowtype;

Procedure ord_pro(vcode varchar2);

 

SQL> CREATE OR REPLACE PACKAGE BODY cur_pack AS

 CURSOR ord_cur(vcode VARCHAR2)

 RETURN order_master%ROWTYPE IS

 SELECT * FROM order_master WHERE VENCODE=vcode;

 PROCEDURE ord_pro(vcode VARCHAR2) IS

   or_rec order_master%ROWTYPE;

 BEGIN

  OPEN ord_cur(vcode);

  LOOP

    FETCH ord_cur INTO or_rec;

    EXIT WHEN ord_cur%NOTFOUND;

    DBMS_OUTPUT.PUT_LIne(’返回的值为' || or_rec.orderno);

  END LOOP;

 END ord_pro;

END cur_pack;

/

 

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值