精华内容
下载资源
问答
  • PLSQL如何让distinct 只作用于一个字段,重复相同的记录。求解~~~~(>_<)~~~~
  • PLSQL中create、drop、truncate等DDL是没有办法直接执行的。 必须要使用: Execute immediate ‘DDL语句’ 但是我发现这样并不能执行!后面查阅发现,oracle执行DDL语句需要使用变量的形式: 即 所谓的动态...

    关于问题前导,使用的数据表中涉及到的字段和类型:


    在PLSQL中create、drop、truncate等DDL是没有办法直接执行的。

    必须要使用:

    Execute immediate ‘DDL语句’

    但是我发现这样并不能执行!后面查阅发现,oracle中执行DDL语句需要使用变量的形式:

    即 所谓的动态SQL语句

    首先在declare中声明变量(  例如:sql varchar2(200):= ‘create table tmp(name varchar2(20), age number(3))’   ),再在begin和end之间 execute immediate才可以!

     

    DML

    关于DML insert、delete、update是可以直接执行的,而且通过SQL对象会返回受到影响的行数。

    但是这里需要注意的是:如果你是在同一个PLSQL中创建了表,同时想在这个PLSQL中insert数据的话,就必须要小心了!!!

    也要使用:executeimmediate的方式来执行:注意,最好也是通过变量的形式执行:

    直接把语句通过 executeimmediate引在后面当然可以,但是这样的话,数据就必须得写死

    而且有varchar和varchar2类型的时候,就很麻烦了:

    引号就会冲突;

    通过变量声明的方式

    就更显得灵活了!

     

     

    因为execute这种形式,是加载进来的时候,就会做判断的,最开始insert的话,如果检测到表不存在!就会报错!再见

    所以为了保证和create统一加载,忽略oracle的报错(我的理解这个和java反射类似,弱引用一样),就要统一为execute immediate

    DQL

    但是关于select的话,不能单独执行,除非后面有into语句,才有执行意义,才不会报错!

     

    最后需求的是查出这样的一个表结构:

    以下代码纯属PLSQL、存储过程练手:

     

    1.创建一个传入系名进行查询平均成绩的存储过程

    create or replace procedure in_dname_out_avg_grade(
           i_dname in dep.dname%type,
           o_agrade out number
    )
    as
    begin 
      select avg(grade) agrade into o_agrade
      from 
      (
        select course.cname, dep.dname, sc.grade
        from course 
        inner join sc on course.cno = sc.cno
        inner join student on sc.sno = student.sno
        inner join dep on dep.dno = student.dno
        where course.cname = '大学物理' and dep.dname = i_dname
      );
    end;

    2.创建一个传入系名查询不及格人数的存储过程

    create or replace procedure in_dname_out_grade_low(
           i_dname in dep.dname%type,
           o_num out number
    )
    as
    begin 
      select count(student.sno) into o_num
      from course 
      inner join sc on course.cno = sc.cno
      inner join student on sc.sno = student.sno
      inner join dep on dep.dno = student.dno
      where course.cname = '大学物理' and dep.dname = i_dname and sc.grade < 60;
    end;

     

    3.创建一个传入系名查询 60-85分人数的存储过程

    create or replace procedure in_dname_out_grade_mid(
           i_dname in dep.dname%type,
           o_num out number
    )
    as
    begin 
      select count(student.sno) into o_num
      from course 
      inner join sc on course.cno = sc.cno
      inner join student on sc.sno = student.sno
      inner join dep on dep.dno = student.dno
      where course.cname = '大学物理' and dep.dname = i_dname and sc.grade >=60 and sc.grade < 85;
    end;

     

    4.创建一个传入系名查询 85分以上人数的存储过程

    create or replace procedure in_dname_out_grade_hig(
           i_dname in dep.dname%type,
           o_num out number
    )
    as
    begin 
      select count(student.sno) into o_num
      from course 
      inner join sc on course.cno = sc.cno
      inner join student on sc.sno = student.sno
      inner join dep on dep.dno = student.dno
      where course.cname = '大学物理' and dep.dname = i_dname and sc.grade >=85;
    end;

    补充注意:

    存储过程不能有declare声明!!!

    如果要声明变量的话直接,如下:

    create or replace procedure createTable_procedure
    as
    -- declare  存储过程不能有声明!!
       v_DDL varchar2(200) := 
          'create table tmp(
           t_cname varchar2(20),
           t_dname varchar2(20),
           grade_low number,
           grade_mid number,
           grade_hig number,
           grade_avg number
           )';
    begin
      execute immediate v_DDL;
    end;

     

    最后得出结果表的PLSQL,注意要用到上面的存储过程:

    declare
          cursor dname_cursor is 
          select distinct dep.dname
          from student
          inner join sc on student.sno = sc.sno
          inner join dep on dep.dno = student.dno
          where sc.cno = (
               select course.cno
               from course 
               where course.cname = '大学物理' 
          );
          
          type dnameContain is table of dep.dname%type
          index by binary_integer;
          contain dnameContain; 
          
          m_cname course.cname%type := '大学物理';
          m_dname dep.dname%type;
          m_low number;
          m_mid number;
          m_hig number;
          m_avg number(3);
          i number := 0;
          
          v_DDL varchar2(200) := 
          'create table tmp(
           t_cname varchar2(20),
           t_dname varchar2(20),
           grade_low number,
           grade_mid number,
           grade_hig number,
           grade_avg number
           )'; 
           v_DML varchar2(100) :=
           'insert into tmp values(:1, :2, :3, :4, :5, :6)';
    begin
      
      execute immediate ' drop table tmp';
      exception when others then
      null;
      
      -- 为什么在一个PL/SQL中不能创建表后面就用
      -- dbms_utility.exec_ddl_statement(v_DDL);
      execute immediate v_DDL;
      
      -- commit;
      
      open dname_cursor;
      loop 
        fetch dname_cursor into contain(i);
        if i>0 then
           -- dbms_output.put_line(contain(i-1));
           m_dname := contain(i-1);
           dbms_output.put_line(m_dname);
           in_dname_out_grade_low(m_dname, m_low);
           in_dname_out_grade_mid(m_dname, m_mid);
           in_dname_out_grade_hig(m_dname, m_hig);
           in_dname_out_avg_grade(m_dname, m_avg);
           dbms_output.put_line(m_mid||', '||m_hig||', '||m_avg);
           -- insert into tmp values(m_cname, m_dname, m_low, m_mid, m_hig, m_avg);
           execute immediate v_DML using m_cname, m_dname, m_low, m_mid, m_hig, m_avg;
        end if;
        i := i+1;
        exit when dname_cursor%notfound;
      end loop;
      close dname_cursor;
      commit;
    end;
    

    注意:commit在PLSQL中可以直接写的!!!

    转载于:https://www.cnblogs.com/mzywucai/p/11053411.html

    展开全文
  • PLSQL

    2018-03-12 16:19:00
    distinct :必须放在开头去重复。 declare :声明变量 一般是用在函数和存储过程的.。 substr(string ,1,3) : 函数解读:取string 重左往右取3字长的字符串。 层次化查询,即树型结构查询,是SQL经常用到的...

    distinct :必须放在开头去重复。

    declare :声明变量 一般是用在函数和存储过程中的.。

    substr(string ,1,3) : 函数解读:取string 中重左往右取3字长的字符串。

    层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成,其语法如下:

           SELECT [LEVEL] ,column,expression,...

           FROM table_name

           [WHERE where_clause]

           [[START WITH start_condition] [CONNECT BY PRIOR prior_condition]];     

           LEVEL:为伪列,用于表示树的层次

           start_condition:层次化查询的起始条件

           prior_condition:定义父节点和子节点之间的关系

        --使用start with ...connect by prior 从根节点开始遍历

        SQL> select empno,mgr,ename,job from emp

          2  start with empno = 7839

          3  connect by prior empno = mgr;

    转载于:https://www.cnblogs.com/xzjf/p/8549925.html

    展开全文
  • plsql中的异常

    千次阅读 2011-06-22 10:32:00
    这句话执行的时候就有错误, 但把排序换成 order by Goodsid 或其它 Barcode,DepotId,GoodsName的时候均没有错误,这是因为 selldate不在查询结果字段,而且这个语句是distinct语句。所以会出现这个错误 下边...

    Oracle异常总结

    2009-09-14 23:26:27 |  分类: ORACLE数据库 阅读266 评论0   字号:   订阅

    Oracle异常处理异常处理是考验一个应用程序健壮性的最好方式,开发人员必须考虑程序中可能出现的各种错误,并进行相应的处理。

    Oracle中异常分为预定义异常,非预定义异常和自定义异常三种。

    一 预定义异常预定义异常是指由PL/SQL所提供的系统异常。当PL/SQL应用程序违反了Oracle规则或出现其它系统限制的情况时,将会隐含地触发一个内部异常。

    以下是PL/SQL为我们预定义的异常(经常更新中):

    1 CURSOR_ALREADY_OPEN该异常触发ORA-06511错误。

    当程序中的一个游标已经执行了打开操作,如果开发人员试图再一次打开这个已经打开的游标时,将触发该异常。

    示例:

    DECLARE

    CURSOR test_cursor IS

    SELECT SYSDATE FROM dual;

    BEGIN

    OPEN test_cursor;

    FOR test_cursor2 IN test_cursor LOOP

    dbms_output.put_line(test_cursor2.SYSDATE);

    END LOOP;

    EXCEPTION

    WHEN cursor_already_open THEN

    dbms_output.put_line('游标已经打开,不能再次对游标执行打开操作。');

    END;

    /

    2 INCALID_CURSOR该异常触发ORA-01001错误。

    当试图对一个尚未打开的游标执行任何操作,如打开该非法的游标执行赋值操作,或者关闭未打开的游标时,将触发该异常。

    示例:

    DECLARE

    CURSOR test_cursor IS

    SELECT SYSDATE FROM dual;

    test_time DATE;

    BEGIN

    --OPEN test_cursor;

    FETCH test_cursor

    INTO test_time;

    dbms_output.put_line('当前时间为: ' || test_time);

    CLOSE test_cursor;

    EXCEPTION

    WHEN invalid_cursor THEN

    dbms_output.put_line('请检查游标是否已经打开.');

    END;

    /

    3 NO_DATA_FOUND该异常触发ORA-01403错误。

    当读取一个游标进行赋值操作(SELECT INTO操作)时,如果未返回任何行,将触发该异常。

    示例:

    DECLARE

    test_owner DATE;

    BEGIN

    SELECT t.owner INTO test_owner FROM all_tables t WHERE t.table_name = 'test';

    dbms_output.put_line(test_owner);

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('No value.');

    END;

    /

    4 TOO_MANY_ROWS该异常触发ORA-01422错误。

    上面是没有返回记录,这里是返回对条记录的时候会触发该异常。

    示例:

    DECLARE

    test_records dba_tables%ROWTYPE;

    BEGIN

    select * INTO test_records from dba_tables where owner='APPS' AND ROWNUM < 3;

    dbms_output.put_line(test_records.table_name);

    EXCEPTION

    WHEN too_many_rows THEN

    dbms_output.put_line('Too many values.');

    END;

    /

    5 VALUE_ERROR该异常触发ORA-06502错误。

    当在PL/SQL程序中执行赋值操作时,如果右边值的长度大于左边变量的长度,将触发该异常。

    示例:

    DECLARE

    v_test VARCHAR2(1);

    BEGIN

    SELECT 'WHAT' INTO v_test FROM dual;

    dbms_output.put_line(v_test);

    EXCEPTION

    WHEN value_error THEN

    dbms_output.put_line('变量的长度不够.');

    END;

    /

    6 DUP_VAL_ON_INDEX该异常触发ORA-00001错误。

    若表的每一列声明为主键,或具有惟一性,如果对该列插入重复的值时将触发该异常。

    示例:

    CREATE TABLE test_table

    (

    v_id NUMBER PRIMARY KEY,

    v_name VARCHAR2(20)

    )

    INSERT INTO test_table VALUES(1,'test1');

    INSERT INTO test_table VALUES(2,'test2');

    SELECT * FROM test_table;

    BEGIN

    UPDATE test_table SET v_name = new_name WHERE v_id = &input_id;

    EXCEPTION

    WHEN dup_val_on_index THEN

    dbms_output.put_line('在deptno列上不能出现重复值.');

    END;

    /

    7 CASE_NOT_FOUND该异常触发ORA-06592错误。

    在CASE语句中,如果CASE语句的条件在WHEN子句中没有找到对应的条件分支,且该CASE语句不包含ELSE分支,将触发该异常。

    示例:

    DECLARE

    v_test NUMBER;

    BEGIN

    SELECT val INTO v_test FROM dual;

    CASE

    WHEN v_test = 1 THEN

    dbms_output.put_line(v_test);

    WHEN v_test = 2 THEN

    dbms_output.put_line(v_test);

    WHEN v_test = 3 THEN

    dbms_output.put_line(v_test);

    --ELSE

    -- dbms_output.put_line(v_test);

    END CASE;

    EXCEPTION

    WHEN case_not_found THEN

    dbms_output.put_line('在CASE语句中没有与' || v_test || '相关的条件.');

    END;

    /

    8 ZERO_DIVIDE该异常触发ORA-01476错误。

    当在程序中使用0作为除数进行运算时,将触发该异常。

    示例:

    DECLARE

    v_test1 NUMBER := 100;

    v_test2 NUMBER := 0;

    v_test3 NUMBER := 0;

    BEGIN

    v_test3 := v_test1 / v_test2;

    dbms_output.put_line(v_test3);

    EXCEPTION

    WHEN zero_divide THEN

    dbms_output.put_line('0不能作为除数.');

    END;

    /

    9 INVALID_NUMBER该异常触发ORA-01722错误。

    数字或值错误,或字符到数值的转换错误。

    示例:

    BEGIN

    UPDATE emp SET sal = sal + '1oo'; -- 1oo

    EXCEPTION

    WHEN invalid_number THEN

    dbms_output.put_line('输入的数字不正确.');

    END;

    /

    DECLARE

    v_test NUMBER;

    v_test2 NUMBER;

    BEGIN

    v_test := '100';

    v_test2 := '1a';

    dbms_output.put_line(v_test);

    EXCEPTION

    WHEN INVALID_NUMBER THEN

    DBMS_OUTPUT.PUT_LINE('输入的数字不正确.');

    END;

    /

    10 ACCESS_INTO_NULL该异常触发ORA-06530错误。

    当程序中的对象还没有先进行对象初始化的操作,就直接为对象的属性赋值,将触发该异常。

    示例:

    DECLARE

    v_test test_type;

    BEGIN

    v_test.v_name := 'test';

    EXCEPTION

    WHEN access_into_null THEN

    dbms_output.put_line('首先初始化对象v_test');

    END;

    /

    11 COLLECTION IS NULL该异常触发ORA-06531错误。

    在给集合元素赋值前,必须先初始化该集合元素,否则触发该异常。

    示例:

    DECLARE

    TYPE emp_ssn_array IS TABLE OF NUMBER/* INDEX BY BINARY_INTEGER*/ ;

    best_employees emp_ssn_array;

    BEGIN

    best_employees(0) := '123456';

    dbms_output.put_line('best_employees(0): ' || best_employees(0));

    EXCEPTION

    WHEN collection_is_null THEN

    dbms_output.put_line('必须初始化集合元素.');

    END;

    /

    12 SUBSCRIPT_BEYOND_COUNT该异常触发ORA-06533错误。

    当使用复合数据类型时,如果下标越界触发该异常。

    示例:

    DECLARE

    TYPE test_array IS VARRAY(20) OF NUMBER;

    v_test test_array;

    BEGIN

    v_test := test_array(123456);

    dbms_output.put_line('v_test(1): ' || v_test(2));

    EXCEPTION

    WHEN subscript_beyond_count THEN

    dbms_output.put_line('下标越界.');

    END;

    /

    13 SUBSCRIPT_OUTSIDE_LIMIT该异常触发ORA-06532错误,当使用复合数据类型时,如果下标为负值时触发该异常。

    示例:

    DECLARE

    TYPE test_array IS VARRAY(20) OF NUMBER;

    v_test test_array;

    BEGIN

    v_test := test_array(123456);

    dbms_output.put_line('v_test(-1): ' || v_test(-1));

    EXCEPTION

    WHEN subscript_outside_limit THEN

    dbms_output.put_line('下标不能是负数.');

    END;

    /

    14 LONIN_DENIED该异常触发ORA_01017错误。

    当PL/SQL连接数据库时,如果密码错误,将触发该异常。

    15 NOT_LOGGED_ON该异常触发ORA-01012错误。

    如果PL/SQL没有连接数据库,程序运行将触发该异常。

    16 PROGRAM_ERROR该异常触发ORA-06501错误。

    如果出现该异常,则表示PL/SQL的内部问题。用户可能需要重新安装数据字典和PL/SQL系统包。

    17 ROWTYPE MISMATCH该异常触发ORA-06504错误。

    在赋值时,如果宿主游标变量和PL/SQL游标变量的返回类型不兼容,将触发该异常。

    18 SELF_IF_NULL该异常触发ORA-30625错误。

    在使用对象类型时,如果在NULL示例上调用成员方法将触发该异常。

    19 STORAGE_ERROR该异常触发ORA-06500错误。

    当PL/SQL块运行时,如果走出内在空间或内在被损坏则触发该异常。

    20 SYS_INVALID_ROWID该异常触发ORA-01410错误。

    当将字符串转变为ROWID时,如果使用了无效的字符串则触发该异常。

    21 TIMEOUT_ON_RESOURCE该异常触发ORA-00051错误。

    Oracle在等待资源时出现超时错误时将触发该异常。

    22 ORA-04021Oracle在等待资源时出现超时错误,该资源可能被其它session锁住,此时将触发该异常。

    23 ORA-01791 不是Selected表达式SELECT DISTINCT goodsid,

    barcode,

    depotid,

    goodsname

    FROM sa_sale

    WHERE depotid = '11'

    ORDER BY selldate

    这句话执行的时候就有错误, 但把排序换成 order by  Goodsid 或其它 Barcode,DepotId,GoodsName的时候均没有错误,这是因为 selldate不在查询结果字段中,而且这个语句是distinct语句。所以会出现这个错误

    下边给出正确的解决办法:

    SELECT goodsid,

    barcode,

    depotid,

    goodsname

    FROM (SELECT DISTINCT goodsid,

    barcode,

    depotid,

    goodsname,

    selldate

    FROM sa_sale

    WHERE depotid = '11')

    ORDER BY selldate

    24 ORA-01002: fetch out of sequence当游标中数据集已经取完,然后再一次进行FETCH操作时将触发该异常。

    25 PLS-00382: expression is of wrong type表达式类型错误。即在代码中赋予操作的左右两边的类型不等。

    二 非预定义异常使用非预定义异常的步骤如下:

    定义异常 -> 关联异常和错误 -> 引用例外

    当定义Oracle错误和例外之间的关联关系时,要使用伪过程EXCEPTION_INTI。

    下面以处理ORA-02291错误为例说明:

    DECLARE

    e_integrity EXCEPTION;

    PRAGMA EXCEPTION_INIT(e_integrity, -2291);

    BEGIN

    UPDATE emp SET deptno = dno WHERE empno = &eno;

    EXCEPTION

    WHEN e_integrity THEN

    dbms_output.put_line('该部门不存在.');

    END;

    /

    三 自定义异常使用预定义异常和非预定义异常,程序可以捕获Oracle错误,并且在出现Oracle错误时自动触发对应的异常。但是在实际应用中,可能还会 遇到其它错误,这时,可以为特定的情况自定义异常,不过需要显示触发该异常:通过定义异常,然后关联异常和错误,显示触发异常,最后在EXCEPTION 中处理该异常。

    示例:

    DECLARE

    l_error_message VARCHAR2(200);

    e_user_exception EXCEPTION;

    BEGIN

    ** ** ** ** **;

    IF '出现错误' THEN

    l_error_message := '定义错误信息';

    RAISE e_user_exception;

    END IF;

    EXCEPTION

    WHEN e_user_exception THEN

    raise_application_error(-20001, l_error_message);

    END;

    /

    四 例外函数1 SQLCODE,SQLERRM在PL/SQL块中出现Oracle错误时,通过使用例外函数可以取得错误号以及相关的错误消息。

    SQLCODE 返回Oracle错误号。

    SQLERRM 返回错误号对应的错误消息。

    示例:

    DECLARE

    v_ename emp.ename%TYPE;

    BEGIN

    SELECT ename INTO v_ename FROM emp WHERE sal = &v_sal;

    dbms_output.put_line('雇员名:' || v_ename);

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('不存在工资为' || v_sal || '雇员');

    WHEN OTHERS THEN

    dbms_output.put_line('错误号' || SQLCODE);

    dbms_output.put_line(SQLERRM);

    END;

    /

    2 RAISE_APPLICATION_ERROR在存储过程,函数和包中使用RAISE_APPLICATION_ERROR可以自定义错误号和消息。

    raise_application_error:用于自定义错误消息(用于程序段中)

    语法:

    raise_application_error(error_number,message[,{TRUE | FALSE}]);

    error_number : 错误号,范围是: -20000 ~ -20999之间的负整数;

    message : 错误消息,长度不能超过2048字节;

    第三个可靠选参数,如果TRUE,该错误会被放在先前错误堆栈中;如果FALSE(默认),则替换先前所有错误.

    示例:

    CREATE OR REPLACE PROCEDURE raise_comm

    (

    eno NUMBER,

    commission NUMBER

    ) IS

    v_comm emp.comm%TYPE;

    BEGIN

    SELECT comm INTO v_comm FROM emp WHERE emp = eno;

    IF v_comm IS NULL THEN

    raise_application_error(-20001, '该员工无补助.');

    END IF;

    EXCEPTION

    WHEN NO_DATA_FOUND THEN

    dbms_output.put_line('该雇员不存在.');

    END;

    /

    展开全文
  • 1.当select语句包含distinct时,无论遇到多少个空值,结果只返回一个null

    1.当select语句中包含distinct时,无论遇到多少个空值,结果中只返回一个null


    展开全文
  • plsql

    2014-02-23 02:09:30
    在SQLPLUS下,实现-英字符集转换 alter session set nls_language='AMERICAN'; alter session set nls_language='SIMPLIFIED CHINESE';  主要知识点: 一、有关表的操作 1)建表 create table test as ...
  • PLSQL中显示游标使用的4个步骤

    千次阅读 2012-06-20 15:31:35
    本例简单介绍一下游标处理的4个过程涉及到的加锁,一致性读的问题. 显式游标处理需四个 PL/SQL步骤: 1 定义/声明游标:就是定义一个游标名,以及与其相对应的SELECT 语句。 格式: CURSOR cursor_name[...
  • plsql有表

    2013-07-02 18:28:34
    1 在from的表表 SELECT   PRL.ITEM_DESCRIPTION,  PRL.UNIT_MEAS_LOOKUP_CODE,  PRL.QUANTITY,  TO_CHAR(PRL.NEED_BY_DATE, 'yyyy/mm/dd') NEED_BY_DATE,  PRL.VENDOR_ID,  
  • SQL和PLSQL中处理NULL的一些问题

    千次阅读 2011-12-26 09:11:31
    SQL和PLSQL中处理NULL的一些问题 NULL的最大的特点就是两个NULL是不相等的。如果用等号来判断两个NULL是否相等得到的结果一定是NULL。从唯一约束的特点也可以看到,对于建立了唯一约束的列,Oracle允许插入多个NULL...
  • Oracle数据库中distinct的用法

    千次阅读 2013-09-04 09:36:27
    distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说...
  • PLSQL

    2010-06-04 20:11:51
    -- max :求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次 -- || :并置 的意思. --说明:也就是通过函数获取树目录的上级类型编码,然后通过if语句获取层级类型编码的后三...
  • 很多人认为inner join 和left join 很简单,但是在实际的业务数据生成,就会出现重复数据;还是浅谈一下; inner join (内连接):假如A表和B表做内连接操作:实际效果是取出两者的公共部分数据; create ...
  • PLSQL调试

    千次阅读 2019-03-16 16:15:56
    以下文章:可以获取的内容,调PLSQL的行号,使用常用的快捷敲代码的方式(部分),初步调试存储过程,dual部分技巧,去重方式 1.调行号 tools(工具)----SQlWindow(窗口类型下)--show gutter line(显示行号) ,即可...
  • 结果如下: distinct关键字 在select语句,字段名的前面,使用distinct可以实现数据结果的排重,去掉重复 --1) select distinct c.pno 编号,c.pname 姓名,c.sex 性别 from cominfo c; 结果如下: --2) select ...
  • 1.作用于单列2.作用于多列3.COUNT统计...在表,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: 表B: 1.作用于
  • PLSQL练习

    2018-07-17 15:46:11
    select distinct m.* from emp e,emp m where e.mgr=m.empno and m.sal>3000 ---22、求出部门名称,带'S'字符的部门员工的工资总和 、部门人数 select dname, sum(sal),count(empno) from emp,dept where ...
  • PLSQL基础

    2021-04-23 08:53:22
    PLSQL基础 PL/SQL(Procedural Language/SQL) 是数据库引入的一种过程化编程语言,它构建于SQL之上,可以用来编写包含SQL语句的程序。 在PL/SQL可以通过过程化的语句来决定哪些代码执行以及代码的执行次数,也...
  • PLSQL操作

    2019-09-28 23:19:09
    PLSQL操作 一、写SQL命令:   不区分大小写。   SQL语句用数字分行,在SQL PLUS被称为缓冲区。   最后以;或/结束语句。  也可以用RUN来执行语句 二、例1:SQL>SELECT dept_id, last_name, ...
  • select distinct gl.group_id, gl.group_name from test_group gl where gl.group_org_id = p_orgid and ( gl.group_name_key like '%' || p_name || '%' or p_name is null or p_name = '' ) and ( gl.group_...
  • SQL中distinct的用法(四种示例分析)

    千次阅读 2017-01-09 14:04:49
    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只 用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,533
精华内容 1,413
关键字:

plsql中distinct