Oracle21c数据库普通用户创建及授权,建表,创建存储过程、序列、触发器

一、Oracle数据库错误 ORA-65096

表示你尝试在多租户容器数据库(CDB)环境中创建一个公共用户(common user)或角色,但没有使用正确的前缀。在多租户架构中,公共用户的用户名必须以 C##c## 开头。

若想在CDB创建用户,用如下代码:

前提是先登录进sys系统账户中

但是,如果你的意图是在特定的可插拔数据库(PDB)中创建一个局部用户(local user),你不应该使用 C##c## 前缀。你可能直接在CDB环境中而不是在特定的PDB中尝试执行该命令。

为了在PDB中创建一个用户,你需要确保首先连接到了正确的PDB。以下是在PDB中创建用户的步骤:

1.连接到目标PDB: 如果你使用的是 SQL*Plus 或类似的工具,你可以使用以下命令连接到目标PDB:

sqlplus

conn sys/orcl as sysdba;

alter session set container=<pdbname>;

这里的 sys 是你的系统管理员账户,而 pdb_name 是你的可插拔数据库的名字,一般是ORCLPDB。

2.检查当前的容器: 一旦连接,你可以运行以下命令来确认你当前连接的是哪个容器:

SHOW CON_NAME;

如果你还没在PDB中,你需要切换到目标PDB。使用:

ALTER SESSION SET CONTAINER = pdb_name;

替换 pdb_name 为你的目标PDB名称。

3.创建用户 : 一旦确定你在正确的PDB中,使用以下命令创建用户,注意不要使用 C##c## 前缀:

CREATE USER fxy IDENTIFIED BY "123456";

在这里,fxy 是新用户的用户名,"123456" 是用户的密码。

授予权限 : 创建用户后,你需要给用户授予最起码的权限,比如 CREATE SESSION,以便用户可以登录:

GRANT CREATE SESSION TO fxy;

二、建表

--员工表

create table emp
(
empno NUMBER(20) not null,
dpetno NUMBER(20),
ename VARCHAR2(20),
user_id NUMBER(20) not null,
birthdate DATE,
gender VARCHAR2(20),
job VARCHAR2(10),
hiredate DATE,
sal NUMBER,
comm NUMBER,
mgr NUMBER(20),
constraint PK_EMP primary key (empno)
);

--部门表

create table dept (
dpetno NUMBER(20) NOT NULL,
dname VARCHAR2(20) NOT NULL,
loc VARCHAR2(20)
);

三、Oracle21C创建存储过程、序列、触发器

1. -- 存储过程

--获取部门人数

CREATE OR REPLACE PROCEDURE get_department_employee_count(

department_id IN NUMBER,

employee_count OUT NUMBER

)

IS

BEGIN

-- Initialize the OUT parameter

employee_count := 0;

-- Attempt to get the employee count

BEGIN

SELECT COUNT(*) INTO employee_count FROM employee WHERE deptno = department_id;

EXCEPTION

-- Handle the NO_DATA_FOUND exception

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('No employees found for the specified department.');

-- Handle other exceptions as needed

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);

END;

END;

/
-- 调用

DECLARE

v_employee_count NUMBER;

BEGIN

get_department_employee_count(department_id => 1, employee_count => v_employee_count);

DBMS_OUTPUT.PUT_LINE('Employee Count: ' || v_employee_count);

END;

/
-- 查询主管姓名

SELECT

e.empno,

e.ename,

e.birthdate,

e.gender,

e.position,

e.hiredate,

e.id,

e.sal,

e.comm,

e.deptno,

s.ename AS supervisorName

FROM

employee e

LEFT JOIN

employee s ON e.id = s.empno

2. -- 序列

CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 NOCACHE;

CREATE SEQUENCE dept_seq START WITH 1 INCREMENT BY 1 NOCACHE;

CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1 NOCACHE;

drop sequence emp_seq;

drop sequence dept_seq;

3. -- 触发器

CREATE OR REPLACE TRIGGER delete_department_employees

BEFORE DELETE ON department

FOR EACH ROW

DECLARE

BEGIN

-- 在删除部门之前,将部门中的员工转移到其他部门(例如,部门号为 0)

UPDATE employee SET deptno = 0 WHERE deptno = :OLD.deptno;

END;

/

四、idea如何连接Oracle数据库

yml文件中写入

复制代码
spring:
  datasource:
    type: oracle.ucp.jdbc.PoolDataSourceImpl
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521:ORCL
    username: 用户名
    password: 密码

创作不易,点个关注再走呗

相关推荐
serve the people38 分钟前
Prompt Serialization in LangChain
数据库·langchain·prompt
万事大吉CC38 分钟前
Win11卸载重装oracle 11g数据库
数据库
数据库那些事儿1 小时前
DMS Airflow:企业级数据工作流编排平台的专业实践
数据库
一 乐2 小时前
流浪动物救助|流浪猫狗救助|基于Springboot+vue的流浪猫狗救助平台设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设
好记忆不如烂笔头abc2 小时前
Configuration of TCP/IP with SSL and TLS for Database Connections
数据库·网络协议·ssl
安全系统学习2 小时前
自学网络安全学习的误区和陷阱
数据库·学习·安全·web安全·网络安全·安全架构
黄色茶杯2 小时前
AI编程工具TRAE解决日常问题之SQLite数据复制
数据库·sqlite
老华带你飞3 小时前
订票系统|车票管理系统|基于Java+vue的车票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·订票系统
weixin_wx520-19833 小时前
骑士人才网全系与phpyun人才网系统数据转移或互转的技术文档和要领,和大家一起共勉
数据库·骑士人才网开源版·骑士人才网数据转移·phpyun人才网源码
聆风吟º3 小时前
国产化数据库选型深度剖析:金仓KES与达梦DM全生命周期成本对比
数据库·kingbasees