我们的Oracle 9i数据库中有一些物化视图,这些视图是很久以前由一个不再在这里工作的人创建的.是否有一种简单(或任何)方法来确定Oracle是否使用这些视图来提供查询?如果它们不再被使用,我们想要摆脱它们.但是我们不想发现这些观点是允许一些随机报告在不到几个小时内运行的事实.我梦想的答案就像是
SELECT last_used_date FROM dba_magic
WHERE materialized_view_name = 'peters_mview'
Run Code Online (Sandbox Code Playgroud)
更棒的是可以告诉我实际的SQL查询使用物化视图的东西.我意识到我可能不得不满足于此.
如果有一个需要10g的解决方案,我们很快就会升级,所以这些答案也会很有用.
我试图改变For循环中上限的值,但循环运行直到在起始中定义的上限.
根据逻辑循环应该是无限的,因为v_num的值总是先于i,但循环执行三次.请解释
这是代码
DECLARE
v_num number:=3;
BEGIN
FOR i IN 1..v_num LOOP
v_num:=v_num+1;
DBMS_OUTPUT.PUT_LINE(i ||' '||v_num);
END LOOP;
END;
Ouput Coming
1 4
2 5
3 6
Run Code Online (Sandbox Code Playgroud) 首先,我要说我的Oracle知识很少.
我们有一个专有的应用程序,可以将数据存储到Oracle 9.2数据库中.我只使用这个软件,因此Oracle每3个月左右.问题是,似乎由于不活动,我将不得不使用以下命令启动数据库/实例:
conn sys as sysdba
<enter password>
startup
Run Code Online (Sandbox Code Playgroud)
如果我在几周内没有使用服务器,我就不必这样做了.我只是好奇这笔交易是什么?这不是什么大不了的事,但它是我可以解决的问题,还是我想解决它?也许这是安全的事情?这种不活动设置在哪里,如果它是什么?
我最感兴趣的是理解,所以信息越多越好.谢谢!
我有一个DATE列,其中包含日期,但我需要查询它以查找不到30天的记录.
START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT START_DATE
WHERE START_DATE < 30;
Run Code Online (Sandbox Code Playgroud)
我知道在ORACLE SQL中查询很简单,但我做错了.
我有一些使用的sql脚本
INSERT INTO secondtable
(field, field1)
SELECT field, field2
FROM table;
Run Code Online (Sandbox Code Playgroud)
我使用oracle 9.x和sqldevelopper.
当我启动它们时,在某些插入上选择我得到外键错误.所以他们没有插入那些工作的人.
当错误出现并且可能显示或记录错误时,是否可以说oracle继续相同?
在Oracle中,列类型为= DATE的表中有一个列(dateColumn)select * from table.
,当我执行以下操作时,特定记录的值显示为'10/03/2010' :
SELECT *
FROM table
WHERE dateColumn < '01-JAN-11'
Run Code Online (Sandbox Code Playgroud)
什么都没有出现.当我做:
SELECT *
FROM table
WHERE dateColumn > '01-JAN-11'
Run Code Online (Sandbox Code Playgroud)
记录出现了.为什么这样做?"2010年10月10日"是第10届MArch 2010,所以显然是<2011年1月1日.
我有这个问题
SELECT
CASE WHEN EXISTS (SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI')
THEN p2.PARM_VALUE
ELSE p1.PARM_VALUE
END as RIGHE
FROM
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '0000' OR ENTE_CD = 'XXXX')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p1,
(SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI') p2
Run Code Online (Sandbox Code Playgroud)
基本上我想在第二个查询至少有一行时返回第二个查询的值,否则返回第一个查询的结果.现在这些是返回值:
SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '7316')
AND PARM_CD = 'PAGINAZIONE_PROMOZIONI' //No retrun
SELECT PARM_VALUE
FROM BO_PARM
WHERE (ENTE_CD = '0000' OR ENTE_CD …Run Code Online (Sandbox Code Playgroud) 我们可以在shell脚本中有多个SQL*PLUS连接吗?
我编写了一个shell脚本,使用SQL*PLUS的COPY命令将表的数据从一个数据库复制到另一个数据库.我没有权限创建Database Link所以,我正在使用COPY命令.
我需要复制大约50个表的数据.当数据集很小时,它会运行并复制所有表的数据.但是当数据集很大时,它会卡住,并且我会在unix机器中获得会话非活动消息.
我考虑拆分语句并将其写成如下:但我收到错误"SP2-0042:未知命令"END1" - 其余行被忽略." 和"SP2-0042:未知命令"END" - 其余行被忽略."
#!/bin/bash
export ORACLE_HOME=/ora00/app/oracle/product/9.2.0.8
export PATH=$PATH:$ORACLE_HOME/bin
args=$#
if [ $args == 1 ]
then
echo "Shell script started"
else
echo "Wrong number of arguments"
exit 1
fi
time_start=`date +%H%M%S`
echo $time_start
sqlplus -s srcUN/srcPwd@srcSID <<END1
COPY from srcUN/srcPwd@srcSID to dstUN/dstPwd@dstSID INSERT tab1 USING SELECT * FROM tab1 WHERE col1 = $1;
COPY from srcUN/srcPwd@srcSID to dstUN/dstPwd@dstSID INSERT tab2 USING SELECT * FROM tab2 WHERE col1 = $1;
END1
sqlplus -s srcUN/srcPwd@srcSID …Run Code Online (Sandbox Code Playgroud) 在Oracle 9i中,在命令行程序中.如何dbms_output.put_line在前一个BEGIN和最后一个之间受影响的行数(更新/删除/插入)COMMIT?
另外,如何打印已执行指令的数量(DML,DDL)?
如何做这样的事......
alter table customer_schedule add (week_number as (TO_CHAR((SCHEDULE_DATE),'iw'))
Run Code Online (Sandbox Code Playgroud)
其中SCHEDULE_DATE是表中现有的列之一