Tag: oracle oracle

使用DISTINCT关键字导致此错误:不是一个SELECTedexpression式

我有一个这样的查询: SELECT DISTINCT share.rooms FROM Shares share left join share.rooms.buildingAdditions.buildings.buildingInfoses as bi … //where clause omitted ORDER BY share.rooms.floors.floorOrder, share.rooms.roomNumber, share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent 这会导致以下exception: Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression 如果我删除DISTINCT关键字,查询运行没有问题。 如果我删除order by子句,查询运行没有问题。 不幸的是,我似乎无法得到没有重复的有序结果集。

PL / SQL块问题:找不到数据

SET SERVEROUTPUT ON DECLARE v_student_id NUMBER := &sv_student_id; v_section_id NUMBER := 89; v_final_grade NUMBER; v_letter_grade CHAR(1); BEGIN SELECT final_grade INTO v_final_grade FROM enrollment WHERE student_id = v_student_id AND section_id = v_section_id; CASE — outer CASE WHEN v_final_grade IS NULL THEN DBMS_OUTPUT.PUT_LINE ('There is no final grade.'); ELSE CASE — inner CASE WHEN v_final_grade >= 90 […]

在PL / SQL中使用dynamicSELECT INTO子句中的绑定variables

我有一个关于在PL / SQL的dynamicSQL语句中可以使用哪些绑定variables的问题。 例如,我知道这是有效的: CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job VARCHAR2) RETURN NUMBER IS v_query_str VARCHAR2(1000); v_num_of_employees NUMBER; BEGIN v_query_str := 'SELECT COUNT(*) FROM emp_' || p_loc || ' WHERE job = :bind_job'; EXECUTE IMMEDIATE v_query_str INTO v_num_of_employees USING p_job; RETURN v_num_of_employees; END; / 我想知道你是否可以在这样的select语句中使用绑定variables CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job […]

如何在SELECT语句中使用BOOLEANtypes

我有BOOLEAN参数中的PL / SQL函数: function get_something(name in varchar2, ignore_notfound in boolean); 这个function是第三方工具的一部分,我不能改变这个。 我想在这样的SELECT语句中使用这个函数: select get_something('NAME', TRUE) from dual; 这不起作用,我得到这个例外: ORA-00904:“真”:无效的标识符 据我所知,关键字TRUE不被识别。 我怎样才能做这个工作?

是否有可能从PL / SQL块输出一个SELECT状态?

我如何得到一个PL / SQL块来输出一个SELECT语句的结果,就像我做了一个普通的SELECT ? 例如,如何做一个SELECT如: SELECT foo, bar FROM foobar; 提示: BEGIN SELECT foo, bar FROM foobar; END; 不起作用。

REGEX从列表中select第n个值,允许空值

我正在使用REGEXP_SUBSTR()从逗号分隔的列表中返回第n个值。 当所有值都存在时,这工作正常,但如果一个项目为空,则失败。 下面是一个在所有值都存在的情况下工作的例子,我select第二个出现的不是逗号的一个或多个字符: SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data 2 from dual; D – 2 但是当第二个值为空时,我真的得到了列表中的第三个项目,当然这确实是第二个出现的一个或多个不是逗号的字符。 但是,我需要它作为第二个项目是空的返回NULL: SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data 2 from dual; D – 3 如果我更改正则expression式以允许零个或多个字符而不是一个或多个字符,则对于超过null的数字也会失败: SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data 2 from dual; D – 3 我需要允许null,但似乎无法得到正确的语法。 从逻辑上讲,我需要返回第n个逗号之前是否存在数据(也允许最后一个值)。 有任何想法吗?