小编Ale*_*ole的帖子

从同一列聚合多个值作为连接字符串(10g)

我有一个很长的查询,跨多个表,我将四个值连接为所有者(名字,中间名和姓氏+组织).所有其他列都是相同的,但有多个所有者,因此,我想聚合多行.

我所看到的是(配对)

#     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)

注意事项:

  • 我无法创建功能(缺少权限)
  • 使用Oracle 10g
  • 我试过CASE(COLLECT...但这会杀死我的联系:

    错误 - "无法从套接字读取更多数据"

    SysAdmin,不知道为什么

  • WM_CONCAT只是重复一个所有者(有时是20次)并且没有给出所需的结果.

我尝试过其他一些事情,没有运气.我当前的查询产生了所需的行数,但只是砍掉了第二个所有者.

我不确定在这里发布整个查询是否明智.请告诉我这是否有帮助.


更新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)

sql aggregate oracle10g

0
推荐指数
1
解决办法
2626
查看次数

Oracle获取日期名称返回错误的名称

我使用它来获取给定日期的名称,所以以下给我星期一:

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数据库做这个,这是正确的方法吗?

谢谢

sql oracle oracle10g

0
推荐指数
1
解决办法
5368
查看次数

在oracle中创建过程

为什么它不起作用?我在甲骨文中运行这个。我想创建这样的程序:

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合并管道清除

sql oracle procedure oracle11g

0
推荐指数
1
解决办法
4581
查看次数

SQL错误:ORA-00907:Oracle 10g中缺少右括号

请找到以下查询.当我运行此查询时,我得到一个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 oracle10g

0
推荐指数
1
解决办法
9283
查看次数

重新启动服务器后出现ORA-12514错误

我在服务器上安装了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 tnsnames oracle11g

0
推荐指数
1
解决办法
1万
查看次数

如何将秒数转换并四舍五入到下一整分钟?

我在 Oracle 表中存储了一个以秒为单位的时间使用量:

5
10
100
500
Run Code Online (Sandbox Code Playgroud)

如何将秒数转换为分钟数,四舍五入到下一个最接近的分钟?对于上面的秒值,我想得到:

1
1
2
9
Run Code Online (Sandbox Code Playgroud)

sql oracle

0
推荐指数
1
解决办法
1773
查看次数

用于初始化IN参数的UPPER函数未按预期工作

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)

我想知道为什么这不起作用 - 我做错了什么?

sql oracle oracle11g

0
推荐指数
1
解决办法
297
查看次数

CROSS JOIN和CROSS JOIN TABLE有什么区别

在以下代码中:

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 oracle join

0
推荐指数
1
解决办法
58
查看次数

如何以小写形式显示列名称?

表结构:

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 sqlplus

0
推荐指数
1
解决办法
6312
查看次数

PL/SQL动态SQL USING子句

我正在使用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)

oracle plsql dynamic-sql

0
推荐指数
1
解决办法
560
查看次数

包体内有两个同名但参数不同的函数是什么意思?

在包规范中,函数名称仅出现一次,因此它不会重载。在包体中,相同的函数名称使用不同的参数集出现两次。其中之一的参数与封装规格中的参数相同。我的问题是,包体中的“第一个 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)

oracle plsql overloading plsql-package

0
推荐指数
1
解决办法
2427
查看次数

Oracle表列包含$

我当前正在将AIX迁移到Linux。Oracle脚本的列名中包含$。在获取shell脚本时,我将转义字符设置为$,但它不起作用。查询如下:

Set escape $

Select c.logoff$time from temp c;
Run Code Online (Sandbox Code Playgroud)

从shell脚本运行时,我得到“ c.logoff无效标识符”。

我怎样才能解决这个问题?

oracle

0
推荐指数
1
解决办法
29
查看次数

oracle表创建

以下代码给了我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行代码非常烦人,因为查看该行没有拼写错误,一切都在正确的位置.

sql oracle oracle10g oracle11g

-5
推荐指数
1
解决办法
210
查看次数