ORA-01722:无效数字错误

时间:2016-01-14 06:55:43

标签: sql oracle numbers ora-01722

执行以下查询时,我面临标题错误。

select to_number('FROM1', 'xxxxxxx') from dual;
  

错误ORA-01722:无效号码

FROM1值可以是:

F1F65
F20B5
F204D

请建议解决方案。我需要将这些值转换为数字。例如,使用以下查询将F1F65转换为991077。

select to_number('F1F65', 'xxxxxxx') from dual;

2 个答案:

答案 0 :(得分:2)

你应该使用

select to_number(FROM1, 'xxxxxxx') from dual;

否则Oracle将FROM1解释为字符串,而不是变量。

答案 1 :(得分:0)

#include<stdio.h> 

struct process {
char na[20];
int at, bt, ft, tat, rem;
float ntat;
} Q[5], temp;

void roundRobin() {
 int rr[20], q, x, k;
int f, r, n, i, j, tt = 0, qt, t, flag, wt = 0;
float awt = 0, antat = 0, atat = 0;

printf("Enter the no. of jobs:");
scanf("%d", &n);
for (r = 0; r < n; r++) {
    printf("Enter process name,arrival time and burst time:\n");
    scanf("%s%d%d", Q[r].na, &Q[r].at, &Q[r].bt);
}
printf("Enter quantum:\n");
scanf("%d", &qt);
for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
        if (Q[i].at > Q[j].at) {
            temp = Q[i];
            Q[i] = Q[j];
            Q[j] = temp;
        }
    }
}
for (i = 0; i < n; i++) {
    Q[i].rem = Q[i].bt;
    Q[i].ft = 0;
}
tt = 0;
q = 0;
rr[q] = 0;
do {
    for (j = 0; j < n; j++)
        if (tt >= Q[j].at) {
            x = 0;
            for (k = 0; k <= q; k++)
                if (rr[k] == j)
                    x++;
            if (x == 0) {
                q++;
                rr[q] = j;
            }
        }
    if (q == 0)
        i = 0;
    if (Q[i].rem == 0)
        i++;
    if (i > q)
        i = (i - 1) % q;
    if (i <= q) {
        if (Q[i].rem > 0) {
            if (Q[i].rem < qt) {
                tt += Q[i].rem;
                Q[i].rem = 0;
            } else {
                tt += qt;
                Q[i].rem -= qt;
            }
            Q[i].ft = tt;
        }
        i++;
    }
    flag = 0;
    for (j = 0; j < n; j++)
        if (Q[j].rem > 0)
            flag++;
} while (flag != 0);

printf("\n\n\t\tROUND ROBIN ALGORITHM");
printf("\n***************************");
printf("\nprocesses Arrival time burst time finish time tat wt ntat");
for (f = 0; f < n; f++) {
    wt = Q[f].ft - Q[f].bt - Q[f].at;
    Q[f].tat = Q[f].ft - Q[f].at;
    Q[f].ntat = (float) Q[f].tat / Q[f].bt;
    antat += Q[f].ntat;
    atat += Q[f].tat;
    awt += wt;
    printf("\n\t%s\t%d\t\t%d\t%d\t%d\t%d %f", Q[f].na, Q[f].at, Q[f].bt,
            Q[f].ft, Q[f].tat, wt, Q[f].ntat);
}
antat /= n;
atat /= n;
awt /= n;
printf("\nAverage tat is %f", atat);
printf("\nAverage normalised tat is %f", antat);
printf("\n average waiting time is %f", awt);
}

SQL Fiddle Demo