ORACLE 写个视图 每隔四个小时取FC字段的平均值 表名是LWX_FCGK_HT 时间字段是prod_time
时间: 2024-10-16 19:03:22 浏览: 22
在Oracle数据库中,你可以创建一个名为`VIEW_NAME`的动态视图(Dynamic View),通过使用SQL的窗口函数(Window Function)来实现每四个小时对表`LWX_FCGK_HT`的`FC`字段求平均值。下面是一个示例SQL查询:
```sql
CREATE OR REPLACE VIEW VIEW_NAME AS
SELECT prod_time,
AVG(FC) OVER (PARTITION BY TRUNC(prod_time, 'HH') ORDER BY prod_time) as avg_FC
FROM LWX_FCGK_HT
WHERE EXISTS (SELECT 1 FROM DUAL WHERE MOD(SYSDATE - trunc(SYSDATE), 4) = 0); -- 检查是否正好是整数小时
-- 这里假设prod_time是以日期时间格式存储,TRUNC()函数用于截断到小时级别
-- 子查询检查当前系统时间是否正好是整数小时后间隔四个小时的时间点
-- 更新视图的频率取决于你的实际需求,如果需要实时更新,可能需要通过调度任务每四小时运行一次这个查询
```
相关问题
ORACLE 写个存储过程 每隔四个小时取FC字段的平均值 表名是LWX_FCGK_HT 时间字段是prod_time
在Oracle中,创建一个定期更新并计算每隔四个小时FC字段平均值的存储过程,可以使用PL/SQL编程语言,结合Oracle的DBMS_SCHEDULER包来实现定时任务。这里提供一个基本示例,你需要先创建存储过程,然后设置调度任务:
首先,创建存储过程:
```sql
CREATE OR REPLACE PROCEDURE get_four_hour_avg_fc (
prod_table IN VARCHAR2,
fc_field IN VARCHAR2)
AS
BEGIN
FOR i IN (0..23) LOOP
SELECT AVG(T.FC)
INTO avg_value
FROM YOUR_TABLE_NAME LWX_FCGK_HT T
WHERE TRUNC(T.PROD_TIME, 'HH') = TO_DATE(i * 4, 'HH24')
GROUP BY FC;
-- 这里可以根据需要执行其他操作,比如更新历史记录或其他表
DBMS_OUTPUT.PUT_LINE('Average FC at 4-hour interval ' || TO_CHAR(i * 4, 'HH24:MI') || ' is: ' || avg_value);
END LOOP;
END;
/
```
在这个示例中,我们假设`YOUR_TABLE_NAME`应该替换为实际的表名,`FC`字段是你要计算平均值的字段。
接着,设置定时任务(假设是在每天的凌晨4点和8点运行):
```sql
DECLARE
schedule_interval INTERVAL DAY(1) HOUR(4);
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'four_hour_avg_fc',
job_type => 'STORED_PROCEDURE',
job_action => 'your_username.YOUR_SCHEMA_NAME.get_four_hour_avg_fc',
job_enabled => TRUE,
next_start_date => SYSDATE + 1,
frequency => schedule_interval);
-- 每隔4小时运行一次,这里举例设置为每天的早上4点和8点
DBMS_SCHEDULER.add_interval_job (
job_name => 'four_hour_avg_fc',
start_date => SYSDATE,
end_date => sysdate + 365,
by_days => 1,
by_hours => {4, 8},
repeat_count => NULL);
END;
/
```
记得替换`your_username.YOUR_SCHEMA_NAME`为你实际的用户名和模式名称。
import glob from aip import AipOcr # 导入AipOcr模块,用于做文字识别 # APP_ID、API_KEY、SECRET_KEY 可自己申请 APP_ID = '34494980' API_KEY = 'CYFBAaCC22kHM7GzRCbAvEKz' SECRET_KEY = 'skGxDrYxFNr7Amb5lwX2SQAVpt1m1gjb' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) path = "pic\ " # 路径 files = glob.glob(path + "*.png") # 路径下所有PNG图片 txt_file = open('abc.txt', 'a') for file in files: pic = open(file, 'rb') # 以二进制(rb)打开 img = pic.read() # 读取 message = client.basicGeneral(img) # 调用百度AI识别图片中的文字 for words in message['words_result']: word = words['words'] # 提取文字 print(word) txt_file.write(word) # 将文字写入文本文件 txt_file.close() # 关闭文本文件
在你的代码中,有以下几个问题:
1. 在 import glob 语句中,应该加上 from 关键字,即应该写成 from glob import glob。
2. 在 path 变量中,路径应该使用双斜杠(\\)或正斜杠(/)来分隔目录,而不是单斜杠(\)。
3. 在打开图片文件时,应该使用 with open(file, 'rb') as pic: 的方式来打开,这样可以自动关闭文件。
4. 在将文字写入文本文件时,应该在每个文字后面加上一个换行符,即应该写成 txt_file.write(word + '\n')。
修改后的代码如下:
```python
from glob import glob
from aip import AipOcr
# APP_ID、API_KEY、SECRET_KEY 可自己申请
APP_ID = '34494980'
API_KEY = 'CYFBAaCC22kHM7GzRCbAvEKz'
SECRET_KEY = 'skGxDrYxFNr7Amb5lwX2SQAVpt1m1gjb'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
path = "pic/"
files = glob(path + "*.png")
txt_file = open('abc.txt', 'a')
for file in files:
with open(file, 'rb') as pic:
img = pic.read()
message = client.basicGeneral(img)
for words in message['words_result']:
word = words['words']
print(word)
txt_file.write(word + '\n')
txt_file.close()
```
记得保存修改后的代码文件,再次运行代码。
阅读全文