我在 MS Sql 服务器中有一个数据库。我也想将其迁移到 Oracle。
但很少有表名和列名达到 30 个字符长。Oracle 不接受任何长度超过 30 个字符的标识符。
Oracle 中是否有任何选项允许我们增加标识符的长度?
谢谢
所以我想创建触发器:
CREATE TRIGGER add_primary_key
AFTER INSERT ON CAJ
FOR EACH ROW
WHEN (ID_CAJ IS NULL)
DECLARE
maximum NUMBER;
BEGIN
maximum := SELECT MAX(ID_CAJ) FROM caj;
if (maximum <> 0)
UPDATE caj
SET ID_CAJ = maximum + 1;
WHERE CAJ_ID = NULL
maximum = maximum +1;
END;
Run Code Online (Sandbox Code Playgroud)
出现此错误:
"invalid NEW or OLD specification"
*Cause: An invalid NEW or OLD specification was given for a column.
*Action: Re-specify the column using the correct NEW or OLD specification.
Run Code Online (Sandbox Code Playgroud)
你们有什么想法吗?
我正在使用 Oracle 12c,并且我有一个IDENTITY列设置为GENERATED ALWAYS.
CREATE TABLE Customers
(
id NUMBER GENERATED ALWAYS AS IDENTITY,
customerName VARCHAR2(30) NULL,
CONSTRAINT "CUSTOMER_ID_PK" PRIMARY KEY ("ID")
);
Run Code Online (Sandbox Code Playgroud)
由于 ID 是自动从序列中生成的,因此它始终是唯一的。
我是否需要在 ID 列上进行 PK?如果需要,是否会影响性能?索引会产生相同的结果但性能更好INSERT吗?
[INS-20802] Oracle 数据库配置助手失败。
原因 - 插件在执行方法中失败 操作 - 请参阅日志或联系 Oracle 支持服务。日志文件位置 C:\Program Files\Oracle\Inventory\logs\installActions2016-12-19_11-03-33AM.log
我已经在基于 oraclelinux:7.1 映像(Docker 版本 1.12.5)的 docker 容器中安装了 Oracle 12c。不过有一个小问题。运行容器时,目录 /docker-entrypoint-initdb.d 中的任何脚本都不会被执行(它们创建数据库用户、执行授权、设置架构等)。这里可能有什么问题?
/docker-entrypoint-initdb.d 及其中的所有 SQL 文件的权限设置为 777。我可以使用默认系统用户登录数据库。
下面你会发现 Dockerfile 复制 SQL 脚本:
FROM oracle-12c:latest
USER oracle
ENV ORACLE_SID ORCL
ENV ORACLE_HOME /u01/app/oracle/product/12.1/db_1
ENV PATH $PATH:$ORACLE_HOME/bin
USER root
RUN echo $PATH
COPY init-scripts/* /docker-entrypoint-initdb.d/
EXPOSE 1521
Run Code Online (Sandbox Code Playgroud)
我的容器中的日志:
2017-01-13T15:43:09.158097846Z
**************************
**** Starting up... ****
**************************
2017-01-13T15:43:09.158142165Z
/home/oracle/.bashrc: line 12: /usr/sbin/groupadd: Permission denied
2017-01-13T15:43:09.308941164Z
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 13-JAN-2017 15:43:09
2017-01-13T15:43:09.308978154Z
Copyright (c) 1991, 2014, Oracle. All rights reserved.
2017-01-13T15:43:09.308987178Z …Run Code Online (Sandbox Code Playgroud) 我有这三个 select 语句,当没有找到数据时,我试图将 null 返回给变量vCLASS1_ID或vCLASS2_IDor 。vCLASS3_ID
SELECT MAX (CLASS1_ID), MAX(CLASS1_DESC)
INTO vCLASS1_ID, vCLASS1_DESC
FROM PRODUCT_CLASSIFICATION
WHERE CLASS1_DESC = P_CLASS1_DESC
GROUP BY CLASS1_ID, CLASS1_DESC;
SELECT MAX (CLASS2_ID),MAX(CLASS2_DESC)
INTO vCLASS2_ID,vCLASS2_DESC
FROM PRODUCT_CLASSIFICATION
WHERE CLASS2_DESC = P_CLASS2_DESC
GROUP BY CLASS2_ID, CLASS2_DESC;
SELECT MAX (CLASS3_ID),MAX(CLASS3_DESC)
INTO vCLASS3_ID,vCLASS3_DESC
FROM PRODUCT_CLASSIFICATION
WHERE CLASS3_DESC = P_CLASS3_DESC
GROUP BY CLASS3_ID, CLASS3_DESC;
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式解决该问题,但失败了
return null使用EXCEPTION when no_data_found thento 变量无法解决我的问题,因为该函数将停止运行
我尝试使用如下函数,但是当有e 子句NULLIF时,它不会返回 null ,并且当我删除该子句时,我将不会得到一条记录:wherwhere
SELECT NULLIF (CLASS1_DESC, 'EXAMPLE') …
我刚刚安装了我的 Oracle 12c,成功地将它连接到了数据库。
因此,我尝试通过 PDB 创建用户名。但即使是 PDB 也不起作用。我是 Oracle 的新手。
成功连接 DB 后,我们可以看到类似消息,Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64 bit production。但在此之后,我可以在一些 youtube 视频中看到更多关于 OLAP、数据挖掘等的问题。我无法得到它。
我有一个表,其中一列的数据类型为number(20)。在其中一种情况下,我需要将一个十进制值保存到列中,但该列会自动将其转换为整数。下面是我创建的一个简单的测试表来测试这个场景。
create table test_tbl
(
amt number(20)
)
insert into test_tbl values (9.999)
Run Code Online (Sandbox Code Playgroud)
上面插入的值是 10 而不是 9.999。如何完全按原样保存 9.999?
谢谢
我正在解决家庭作业问题。我需要让 Oracle 12c 在 Windows 上与 sqldeveloper 一起工作,我得到:
测试失败:ORA-01017:用户名/密码无效;登录被拒绝。
我试过的步骤:
alter user sys as identified by "<password>", 然后 alter user sys account unlock
Select username/password from dba_users - 这给了我一个看起来很不干净的输出,即格式
USERNAME
------------------------------------------------------------------------------
PASSWORD
--------------------------------------------------------------------------------
THINK THIS IS A USERNAME
THINK THIS IS A PASSWORD
Run Code Online (Sandbox Code Playgroud)一些单词
这会重演。假设第一个响应是用户名,第二个响应是密码,我尝试了两者的各种组合。然后我尝试了第一和第三的各种组合,仍然没有运气。我解锁了多个帐户,使用了很多。没运气。
找到我的 tsnames.ora,我没有看到任何看起来像用户名和密码的东西。我确实看到它使用的是 localhost 和端口 1521,这是我在 SQL Developer 中的
运行Select instance from v$thread;SQL 并返回 orcl,将其用作我的 SID
尝试了各种连接类型,包括 PDBORCL 和 PDBORCL 似乎不是我的选择。
试图重新安装 Oracle 12g,我没有看到它要求我输入用户名的任何地方。它确实要求在全局数据库名称下输入密码。我尝试了该密码和 SYS 或我的 oracle 在线帐户的组合,但没有。
在 sql developer 中的首选项下的高级设置中设置我的 tnsnames …
我正在尝试使用单个语句执行多个插入来实现此目的,我正在使用 Insert into select 语句。但是我面临着当两列在插入中具有相同的值时。我收到的错误消息是ORA-00918: column ambiguously defined.
询问
INSERT INTO sample (
HOST,
TOTAL_PING,
TOTAL_UNAVAILABLE_PING
)
SELECT * FROM (
SELECT 'FR3158-73-1',
82,
82
FROM DUAL
UNION ALL
SELECT 'FR3158-76-2',
80,
10
FROM DUAL
)
Run Code Online (Sandbox Code Playgroud)
如果我将一个值更改为有效的值,则第一个 select 语句中存在两个值是 82 和 82 的问题。即使列值相同,我也不知道如何进行这项工作。
- - 更新 - -
表定义
CREATE TABLE sample
(
ID NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1) PRIMARY KEY,
HOST VARCHAR2(15 BYTE),
TOTAL_PING INTEGER,
TOTAL_UNAVAILABLE_PING INTEGER,
ADDED_ON TIMESTAMP(6) DEFAULT systimestamp
);
Run Code Online (Sandbox Code Playgroud)