sql - CTAS 功能

标签 sql oracle plsql oracle11g

我有一个包含以下列的表:年龄(VARCHAR2)、男女(NUMBER)、男性(NUMBER)、女性(NUMBER)。我正在尝试使用将返回百分比 (num1/num2) 的存储函数编写 CTAS 语句。对于我的一生,我无法弄清楚这一点。本质上,我希望 CTAS 为我提供第二个包含年龄(VARCHAR2)和百分比(数字)的表,并使用适当的百分比计算来复制表 1 年龄中的每条记录。

这就是我到目前为止所拥有的。

这是我的函数。

CREATE OR REPLACE FUNCTION CALCULATE_PERCENT(NUM1 IN NUMBER,NUM2 IN NUMBER)
  RETURN NUMBER
    IS TOTAL NUMBER;
    BEGIN
      SELECT (NUM1/NUM2) INTO TOTAL FROM DUAL;
      RETURN TOTAL;
    END;

这是迄今为止我的 CTAS。

CREATE TABLE ARMalePercentage (AGE PRIMARY KEY) 
AS SELECT A.AGE, calculate_percent(num1=>A.MALE,num2=>A.BOTHSEXES) 
 "Percent Male Population" from arkansas2010census a;

我是 SQL 新手,不知道我做错了什么,所以感谢您的帮助。

解决方案:

CREATE TABLE ARMalePercentage (AGE PRIMARY KEY, "男性人口百分比") AS SELECT A.AGE, (从对偶中选择计算百分比(a.MALE,a.BOTH_SEXES)) "男性人口百分比"FROM arkansas2010census a;

最佳答案

无需创建表来查看计算列。而是创建一个VIEW

你的函数可以简化。

CREATE OR REPLACE FUNCTION calculate_percent (
     num1   IN NUMBER,
     num2   IN NUMBER
) RETURN NUMBER DETERMINISTIC --marks a function that returns predictable results
     IS
BEGIN
 RETURN ROUND( ( num1 / num2 ) * 100.00,2); --Optional rounding to 2 decimal places
END;
/

查看

CREATE OR REPLACE VIEW armalepercentage AS
     SELECT a.age,
            calculate_percent(a.male,a.bothsexes) AS  "Percent Male Population"
     FROM arkansas2010census a;

或者简单地添加 VIRTUAL COLUMN到现有表

ALTER TABLE arkansas2010census ADD (
     PCT_MALE NUMBER GENERATED ALWAYS AS ( calculate_percent(male,both_sexes) )
);

关于sql - CTAS 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201349/

相关文章:

java - 即使在 sql Developer 中启动相同的命令有效,为什么 resultSet next 不会从我的 Oracle SQL 数据库返回任何值?

oracle - oracle中如何删除包含特殊字符的触发器?

SQL查询以查找交错的记录

oracle - PL/SQL中的移位运算符

php - 使用 mysql_fetch_array() 显示一些图像

sql - 如何从存储过程返回所有值?

mysql - order/group by 子句中使用的列在 select 子句中是否是强制的?

oracle - 系统日期差异

sql - 根据在另一个表中删除的行删除表行

php - 按字母数字和前 15 位查询 MySQL