标签: plsql

尝试通过PL/SQL导出Oracle提供了一个日期的0000-00-00

我继承了一个Oracle .dmp文件,我试图将其转换为CSV,以便我可以将其加载到MySQL中.

我正在使用的一般方法在这里描述.我遇到了一排问题.它的日期为5544-09-14,如下所示:

alter session set nls_date_format = 'dd-MON-yyyy';
select OID, REF, TRADING_DATE From LOAN WHERE REF = 'XXXX';

OID REF                  TRADING_DATE
--- -------------------- ------------
1523 XXXX                 14-SEP-5544
Run Code Online (Sandbox Code Playgroud)

这是来自遗留系统的垃圾数据,它不验证输入日期.我想知道为什么我的PL/SQL函数导出这个值的数据扼流圈呢?

它使用TRADING_DATE值'0000-00-00T00:00:00'导出该行,我不知道为什么?

SELECT dump(TRADING_DATE) FROM LOAN WHERE REF = 'XXXX';

DUMP(TRADING_DATE)
--------------------------------------------------------------------------------
Typ=12 Len=7: 44,156,9,14,1,1,1
Run Code Online (Sandbox Code Playgroud)

和

SELECT to_char(trading_date, 'YYYYMMDDHH24MISS') FROM LOAN WHERE REF = 'XXXX';
TO_CHAR(TRADIN
--------------
00000000000000
Run Code Online (Sandbox Code Playgroud)

oracle plsql

2
推荐指数
1
解决办法
850
查看次数

PLSQL CLOBS变成变量

我正在尝试将a保存CLOB到变量中以执行提取等操作.我有这个代码:

DECLARE
  clob_rec CLOB;
  n_rec NUMBER:=100;
BEGIN
  SELECT LOB INTO clob_rec FROM table1 WHERE ID = 1234;
  n_rec := clob_rec.EXTRACT('//XPTO/text()', 'xmlns:XPTO').getNumVal();
END;
Run Code Online (Sandbox Code Playgroud)

我想保存多个值,XML如各种变量n_rec.如何获得"对象实例(CLOB)"来执行函数或方法extract()?

oracle plsql oracle10g oracle11g plsqldeveloper

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

SQL select case when子句

以下是查询

select *,  "Price Range" = 
  CASE 
     WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
     WHEN ListPrice < 50 THEN 'Under $50'
     WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
     WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
     ELSE 'Over $1000'
  END
  FROM Production.Product
      ORDER BY ProductNumber
Run Code Online (Sandbox Code Playgroud)

但是有SQL错误,在FROM之前缺少重要的单词.

case如果我想选择所有列,我们使用的蓝图是什么?

sql oracle plsql case

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

sql中的西欧字符到土耳其语

我遇到了严重的字符编码问题.给出一些背景知识:

  1. 我有土耳其语的商业用户,他们用土耳其语在Unix屏幕上输入一些数据.
  2. 我的数据库NLS参数设置为AMERICAN,WE8ISO8859P1而Unix NLS_LANG 为AMERICAN_AMERICA.WE8ISO8859P1.
  3. 土耳其企业能够在UNIX屏幕和TOAD上看到所有土耳其人物,而我却不是.我只能在西欧字符集中看到它们.

在业务结束时:ÖZER ?N?AAT TAAHHÜT VE
在我们结束时:ÖZER ÝNÞAAT TAAHHÜT VE

如果您注意到土耳其字符?并且?正在转换为ISO 8859-1字符集.但是,所有设置(db和unix中的NLS参数)在两端都是相同的ISO8859-1(西欧)

通过一些研究,我可以理解 - 土耳其机器可以通过实时转换显示土耳其数据(DB NLS设置被本地NLS设置覆盖).

现在,我有一个在我的db中运行的接口 - 有一些PL/SQL脚本(通过shell脚本运行)从数据库中提取一些数据并将它们假脱机到unix路径上的.csv文件.然后通过MFT(托管文件传输)将.csv文件传输到外部系统.

问题是 - Exract永远不会有任何土耳其人的性格.每个土耳其人角色都会被转换成西欧角色,并且像这样对待外部系统,这被视为数据转换/丢失的情况,我的生意真的很不开心.

谁能告诉我 - 我怎么能保留所有土耳其人物?

PS:外部系统的字符集可以设置为ISP8859-9 charcterset.

提前谢谢了.

sql unix oracle shell plsql

2
推荐指数
1
解决办法
4356
查看次数

Oracle SQL:为每个id显示n行

我有一个包含2列ID和URL的表,每个ID都有几个URL.我想每个ID只提取5个最大URL.我如何在Oracle SQL中执行此操作?

sql oracle plsql top-n

2
推荐指数
1
解决办法
1496
查看次数

ORA-01438:大于此列允许的指定精度的值

以下是我的代码,我不明白我做错了什么.任何帮助将不胜感激

CREATE OR REPLACE
PROCEDURE COMP_LATE_FEE(LATE_APT_FINE IN NUMBER, LATE_GRG_FINE IN NUMBER)
AS
DIFF NUMBER;
TYPE MBCUR IS REF CURSOR RETURN MONTHLY_BILL%ROWTYPE;
MONBILL MBCUR;
MBREC MONTHLY_BILL%ROWTYPE;
BEGIN
--DIFF := FLOOR(SYSDATE - (TRUNC(SYSDATE,'MM')));
--DBMS_OUTPUT.PUT_LINE(DIFF);

OPEN MONBILL FOR
    -- checking the status of all last month's bills
    SELECT * FROM MONTHLY_BILL
    WHERE STATUS = 'PENDING' AND SYSDATE > ED_DT;
FETCH MONBILL INTO MBREC;
    -- adding the late fee amount for any bills that are past the due date
    -- due date = last …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ora-01438

2
推荐指数
1
解决办法
7199
查看次数

数字格式转换

我有这样的货币金额值;

22200000
Run Code Online (Sandbox Code Playgroud)

我想把这个号码转换成;

22,2  (Number format)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

oracle plsql

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

PL/SQL - IN CLAUSE中以逗号分隔的列表

我无法获得一块pl/sql代码.在我的程序的顶部,我从我的oracle apex应用程序中获取了一些关于复选框的数据.因为包含复选框的报表是动态生成的,所以我必须遍历

APEX_APPLICATION.G_F01 
Run Code Online (Sandbox Code Playgroud)

列出并生成一个逗号分隔的字符串,如下所示

v_list VARCHAR2(255) := (1,3,5,9,10);
Run Code Online (Sandbox Code Playgroud)

我想稍后在该列表上查询并将v_list放在IN子句上,就像这样

SELECT * FROM users 
WHERE user_id IN (v_list);
Run Code Online (Sandbox Code Playgroud)

这当然会引发错误.我的问题是我可以将v_list转换为什么,以便能够将它插入到pl/sql过程中的查询中的IN子句中?

plsql oracle-apex

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

PL/SQL动态SQL

我需要帮助.我在构建PL/SQL块时遇到问题.在游标中,我构建了一个查询,我想在游标上插入一个过滤器.以下是一个例子:

DECLARE 
code NUMBER;
parameters_amb myOthertable%ROWTYPE;

CURSOR test is SELECT id from mytable
 if parameters_amb.test2 is not null  then
    where mytable.name = 'NAMETABLE'
 else
    where mytable.name = 'NAMETABLE2';
Run Code Online (Sandbox Code Playgroud)

谁能协助我进行这种建设?

oracle conditional plsql cursor

2
推荐指数
1
解决办法
761
查看次数

需要逗号分隔输出以获取多行的查询

查询:

select o.candidateid 
from onboardingcandidates o, candidatedetails c 
where o.candidateid=c.candidateid 
    and o.JOININGSTATUS='0091' 
    and to_date(o.joiningdate)=to_date(sysdate+5);

Output:

cand1
cand2
cand3
cand62

Required Output:

cand1, cand2, cand3, cand62
Run Code Online (Sandbox Code Playgroud)

sql plsql oracle11g

2
推荐指数
1
解决办法
71
查看次数