我有一个很长的查询,跨多个表,我将四个值连接为所有者(名字,中间名和姓氏+组织).所有其他列都是相同的,但有多个所有者,因此,我想聚合多行.
我所看到的是(配对)
# Owner
1 Sam Smith, AAA
2 Stan Bird, BBB
2 Nancy Bird, BBB
3 Mike Owen, CCC
Run Code Online (Sandbox Code Playgroud)
我想看到的是
# Owner
1 Sam Smith, AAA
2 Stan Bird, Nancy Bird, BBB
3 Mike Owen, CCC
Run Code Online (Sandbox Code Playgroud)
注意事项:
我试过CASE(COLLECT...
但这会杀死我的联系:
错误 - "无法从套接字读取更多数据"
SysAdmin,不知道为什么
我尝试过其他一些事情,没有运气.我当前的查询产生了所需的行数,但只是砍掉了第二个所有者.
我不确定在这里发布整个查询是否明智.请告诉我这是否有帮助.
更新2012-01-29
wm_concat
之前我使用不正确,但是当我使用它时,我收到此错误:
ORA-06502: PL/SQL: numeric or value error: character string buffer too
small ORA-06512: at "WMSYS.WM_CONCAT_IMPL", line 30
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action: …
Run Code Online (Sandbox Code Playgroud) 我使用它来获取给定日期的名称,所以以下给我星期一:
Select to_char(to_date('01/04/2013','dd/mm/yyyy'), 'DAY') from dual
Run Code Online (Sandbox Code Playgroud)
但是,如果我将相同的东西应用到一个表并用他们的名字提取日期我得到一个错误的日期名称,在'01/April/2013'的情况下,它给了我星期六.
Select to_char(to_date(myDateColumn,'dd/mm/yyyy'), 'DAY'), myDateColumn
From myTable WHERE myDateColumn = to_date('01/04/2013','dd/mm/yyyy')
Run Code Online (Sandbox Code Playgroud)
这就是我在MS SQL上的表现,但我需要为Oracle 10g数据库做这个,这是正确的方法吗?
谢谢
为什么它不起作用?我在甲骨文中运行这个。我想创建这样的程序:
CREATE OR REPLACE PROCEDURE ME( X in NUMBER )IS
declare
num1 number;
BEGIN
num1:=1;
insert into a (year) values(7);
END;
Run Code Online (Sandbox Code Playgroud)
这是错误:
PLS-00103:在期望以下其中一项时遇到符号“DECLARE”:开始函数杂注过程子类型类型当前光标删除存在先前的外部语言符号“开始”已替换为“DECLARE”以继续。7/5 PLS-00103:当期望出现以下其中一项时遇到符号“文件结束”:( begin case声明结束异常 exit for goto ifloop mod null pragma raise return select update while with << continue close current delete获取锁插入打开回滚保存点设置sql执行提交forall合并管道清除
请找到以下查询.当我运行此查询时,我得到一个ORA-00907:错过右括号错误.我无法理解此查询的问题.请给我这个错误的解决方案.我已经阅读了关于这个主题的一些相关主题.但是,我没有得到正确的解决方案.我使用的是Oracle 10g版本.
查询:
SELECT A.City||'.' AS AAddress,
M_InOut_Header_v.Org_Location_ID AS Org_Location_ID,
M_InOut_Header_v.ContactName,
M_InOut_Header_v.Title,
M_InOut_Header_v.EMail,
M_InOut_Header_v.Phone,
M_InOut_Header_v.BPGreeting,
M_InOut_Header_v.Name2,
M_InOut_Header_v.Name,
B.City||'.' AS BAddress,
M_InOut_Header_v.C_Location_ID AS C_Location_ID,
M_InOut_Header_v.BPContactGreeting,
--M_InOut_Header_v.BPGreeting,
--M_InOut_Header_v.Name,
--M_InOut_Header_v.Name2,
M_InOut_Header_v.Address1,
M_InOut_Header_v.Address2,
M_InOut_Header_v.Address3,
M_InOut_Header_v.Address4,
M_InOut_Header_v.City,
M_InOut_Header_v.POSTAL1,
M_InOut_Header_v.CountryName,
--M_InOut_Header_v.BPContactGreeting,
--M_InOut_Header_v.Name,
M_InOut_Header_v.OrderRemarks,
(SELECT NVL(C_Order.DocumentNo,'')||'
- '||NVL(TRIM(TO_CHAR(C_Order.DateOrdered,'DD/MM/YYYY')),'')
FROM C_Order
WHERE M_InOut_Header_v.C_Order_ID=C_Order.C_Order_ID
) AS CC_Order_ID,
M_InOut_Header_v.C_Order_ID AS C_Order_ID,
M_InOut_Header_v.OrderType,
M_InOut_Header_v.ReferenceNo,
M_InOut_Header_v.POReference,
(SELECT NVL(M_Warehouse.Name,'')
FROM M_Warehouse
WHERE M_InOut_Header_v.M_Warehouse_ID=M_Warehouse.M_Warehouse_ID
) AS DM_Warehouse_ID,
M_InOut_Header_v.M_Warehouse_ID AS M_Warehouse_ID,
(SELECT NVL(M_Shipper.Name,'')
FROM M_Shipper
WHERE M_InOut_Header_v.M_Shipper_ID=M_Shipper.M_Shipper_ID
) AS EM_Shipper_ID,
M_InOut_Header_v.M_Shipper_ID AS M_Shipper_ID,
M_InOut_Header_v.Vehicle_No_BizInt,
M_InOut_Header_v.TrackingNo, …
Run Code Online (Sandbox Code Playgroud) 我在服务器上安装了oracle 11g,而.Net oracle客户端将访问数据库.
直到昨天我使用此连接字符串从客户端连接:
User ID=dbcplas;Password=pwd123;Data Source=(DESCRIPTION = (ADDRESS =(PROTOCOL = TCP)(HOST = 172.17.26.7)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl.cplas3.com)))
Run Code Online (Sandbox Code Playgroud)
直到昨天我才能在同一个客户端中使用Oracle SQL Developer.
今天早上我们重新启动服务器进行维护.重新启动服务器后,我无法从客户端.Net应用程序或sqldeveloper登录.
我能够通过sql plus服务器系统登录.
除此之外,我无法通过任何其他方式登录.
服务器端sql-developer也无法正常工作.
我从服务器上给出了以下详细信息:
lsnrctl服务:
C:\Users\Administrator>lsnrctl services
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 07-JAN-2014 15:
:45
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.26.7)(PORT=1521
)
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER …
Run Code Online (Sandbox Code Playgroud) 我在 Oracle 表中存储了一个以秒为单位的时间使用量:
5
10
100
500
Run Code Online (Sandbox Code Playgroud)
如何将秒数转换为分钟数,四舍五入到下一个最接近的分钟?对于上面的秒值,我想得到:
1
1
2
9
Run Code Online (Sandbox Code Playgroud) CREATE OR REPLACE PROCEDURE appraisal
(p_grade IN VARCHAR2 := UPPER(' '))
IS
v_appraisal VARCHAR2(20) := '';
BEGIN
v_appraisal := CASE p_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very good'
WHEN 'C' THEN 'Bad'
ELSE 'No such grade!'
END;
DBMS_OUTPUT.PUT_LINE('Grade:-'||p_grade ||' Appraisal:-'|| v_appraisal);
END;
/
EXECUTE appraisal('a');
Run Code Online (Sandbox Code Playgroud)
输出:
Grade:-a Appraisal:-No such grade!"
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这不起作用 - 我做错了什么?
在以下代码中:
SELECT ... FROM ... CROSS JOIN TABLE ... WHERE ...;
Run Code Online (Sandbox Code Playgroud)
CROSS JOIN TABLE是什么意思?
我在网上搜索,但我只能找到CROSS JOIN.
我想CROSS JOIN TABLE作用于一个表,意思是这样的表:
CREATE OR REPLACE ... AS TABLE OF ...;
Run Code Online (Sandbox Code Playgroud)
这是完整的查询:
SELECT prog.id_oct_prog_tran_a_participati, prog.code_ressource, prog.instant_depart, prog.commentaire, prog.en_hors_economie_de_comb, discr.delai, discr.valeur_point, MOD(delai, 60) AS H24
FROM req_prog prog
CROSS JOIN TABLE(POINTS_DISCRETS(pIdChronique=>id_chr_substitution)) discr
WHERE horizon <= 'J1'
AND delai > 0
ORDER BY id_oct_prog_tran_a_participati, instant_depart, horizon, delai
Run Code Online (Sandbox Code Playgroud)
POINTS_DISCRETS
是一个返回类型元素的函数TYPE_TAB_POINT
.并且TYPE_TAB_POINT
是DBA创建的类型如下:
create or replace TYPE "TYPE_TAB_POINT" AS TABLE OF TYPE_POINT;
Run Code Online (Sandbox Code Playgroud)
TYPE_POINT
创建的类型在哪里:
create or …
Run Code Online (Sandbox Code Playgroud) 表结构:
SQL>DESCRIBE tipsdb;
Name Null? Type
----------------------------------------- -------- ----------------------------
USERNAME CHAR(20)
MAC CHAR(20)
PASSWORD CHAR(50)
SQL>
Run Code Online (Sandbox Code Playgroud)
完整的表格输出:
SQL> select * from tipsdb;
USERNAME
------------------------------------------------------------
MAC
------------------------------------------------------------
PASSWORD
--------------------------------------------------------------------------------
arun
aabbccddeeff
whopee
Run Code Online (Sandbox Code Playgroud)
电流输出:
SQL> select PASSWORD as user_password from tipsdb;
USER_PASSWORD
--------------------------------------------------------------------------------
whopee
Run Code Online (Sandbox Code Playgroud)
预期输出:
SQL> select PASSWORD as user_password from tipsdb;
user_password
----------------------
whopee
Run Code Online (Sandbox Code Playgroud)
在上面的查询中,我希望该user_password
列以小写而不是大写显示。
我正在使用Oracle 11g数据库,发布11.2.0.3.0 - 64位生产
我有几个已定义的包,过程,函数和数据类型.在使用集合,数组和其他数据结构进行大量中间计算之后,我最终需要动态创建数据库表以输出我的最终结果.出于这个问题的目的,我有以下内容:
TYPE ids_t IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
benefit_ids ids_t;
--Lots of other code which successfully populates benefit_ids.
--benefit_ids has several million rows, and is used successfully as
the input to the following function:
FUNCTION find_max_ids(in_ids in ids_t)
RETURN ids_t
IS
str_sql varchar2(200);
return_ids ids_t;
BEGIN
str_sql := 'SELECT max(b.benefit_id)
FROM TABLE(:1) a
JOIN benefits b ON b.benefit_id = a.column_value
GROUP BY b.benefit_id';
EXECUTE IMMEDIATE str_sql BULK COLLECT INTO return_ids USING in_ids;
RETURN return_ids; …
Run Code Online (Sandbox Code Playgroud) 在包规范中,函数名称仅出现一次,因此它不会重载。在包体中,相同的函数名称使用不同的参数集出现两次。其中之一的参数与封装规格中的参数相同。我的问题是,包体中的“第一个 func”是否实际被调用,如果是,它到底在做什么?它正试图回归自己。
--package specification
CREATE OR REPLACE
PACKAGE jtestpkg
IS
FUNCTION testfunc(p_num IN NUMBER, p_out1 IN out varchar2, p_out2 IN out varchar2)
RETURN NUMBER;
END jtestpkg;
--package body
CREATE OR REPLACE
PACKAGE BODY jtestpkg
IS
--first func
function testfunc
(p_num IN NUMBER,
p_out1 IN OUT varchar2)
return number is
v_out2 varchar2(50);
BEGIN
dbms_output.put_line('invoking first func');
RETURN testfunc(
p_num,
p_out1,
v_out2);
END;
--second func
FUNCTION testfunc(
p_num IN NUMBER,
p_out1 IN OUT varchar2,
p_out2 IN OUT varchar2)
RETURN NUMBER
IS
v_num …
Run Code Online (Sandbox Code Playgroud) 我当前正在将AIX迁移到Linux。Oracle脚本的列名中包含$。在获取shell脚本时,我将转义字符设置为$,但它不起作用。查询如下:
Set escape $
Select c.logoff$time from temp c;
Run Code Online (Sandbox Code Playgroud)
从shell脚本运行时,我得到“ c.logoff无效标识符”。
我怎样才能解决这个问题?
以下代码给了我ERROR at line 3: ORA-00907: missing right parenthesis
:
CREATE TABLE ORGANISATION(
ORG_REF VARCHAR(5),
POSTCODE VARCHAR(10) FOREIGN KEY,
TELEPHONE NUMBER FOREIGN KEY,
DESCRIPTION VARCHAR(30),
AGENCY_ID VARCHAR(5));
Run Code Online (Sandbox Code Playgroud)
第3行代码非常烦人,因为查看该行没有拼写错误,一切都在正确的位置.